我需要一个仅在一个维度上动态的多维字符数组...
我必须存储一对长度为 10 个(或更少)字符的字符串,但“对”的数量可变。
我的想法是这样的
char (*instrucao)[2][10];
这给了我一个指向 2x10 字符数组的指针,但是当我这样做时它不能正常工作:
char strInstrucoes[117], *conjunto = calloc(21, sizeof(char));
instrucao = calloc(1, sizeof(char[2][10]));
conjunto = strtok(strInstrucoes,"() ");
for(i = 0; conjunto != NULL; i++){
realloc(instrucao, i+1*sizeof(char[2][10]));
sscanf(conjunto,"%[^,],%s", instrucao[i][0], instrucao[i][1]);
printf("%s | %s\n", instrucao[i][0], instrucao[i][1]);
conjunto = strtok(NULL, "() ");
}
将 strInstrucoes
作为 (abc,123) (def,456) (ghi,789)
,我不会像这样用 3 行 2 对矩阵:
abc | 123
def | 456
ghi | 789
但这就是我得到的:
abc | 123
def | 45def | 45de
ghi | 789
执行此操作的正确方法是什么? 谢谢!
最佳答案
您应该将指针分配给 realloc
返回的新地址
instrucao = realloc(instrucao, (i+1)*sizeof(char[2][10]));
请注意,对于错误检查,您可能希望分配给一个新指针并检查 NULL
。另请注意括号 - 您基本上只是添加了 i
而不是乘以所需的大小。容易监督。
请注意,不需要初始 calloc
。只需将 instrucao
初始化为 NULL
,当第一次传递空指针时,realloc 的行为将类似于 malloc
。
关于c - 动态多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1024772/