c - 动态多维数组

标签 c arrays pointers multidimensional-array

我需要一个仅在一个维度上动态的多维字符数组...
我必须存储一对长度为 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/

相关文章:

c++ - 无法在 ubuntu 12.04 64 位中使用 gloox 库

c - 从缓冲区和位置绘制像素 (glDrawPixels)

c - 使用 free() 无法释放内存

c - 每次迭代都会替换索引中的值

无法在运行时解决堆损坏问题

将元素添加到 c 中列表开头的代码 - 错误是什么?

c - 错误: implicit declaration of function 'g_slist_free_full'

php - 获取数组中项目的通用名称并保存每个项目的其余部分

c - C 数组在内存中是如何表示的?

javascript - 试图在数组中查找 # 个重复项 - 我的函数返回 0?