动态多维数组

Gab*_*abe 0 c arrays pointers multidimensional-array

我需要一个多维的字符数组,它只在一个维度上是动态的......
我必须存储一对字符串,每个字符串的长度为10(或更少)字符,但具有可变数量的"对".

我的想法是这样的

char (*instrucao)[2][10];
Run Code Online (Sandbox Code Playgroud)

这给了我一个指向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, "() ");
}
Run Code Online (Sandbox Code Playgroud)

有了strInstrucoesas (abc,123) (def,456) (ghi,789),我没有矩阵与3对2对,每个像这样:

abc | 123
def | 456
ghi | 789
Run Code Online (Sandbox Code Playgroud)

但这是我得到的:

abc | 123
def | 45def | 45de
ghi | 789
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?谢谢!

Joh*_*itb 5

您应该指定新地址realloc返回的指针

instrucao = realloc(instrucao, (i+1)*sizeof(char[2][10]));
Run Code Online (Sandbox Code Playgroud)

请注意,对于错误检查,您可能希望分配给新指针并检查NULL.另请注意parens - 您基本上只是添加i而不是乘以所需的大小.轻松监督.

请注意,不需要初始化calloc.只是初始化instrucaoNULL,并且realloc将像malloc第一次传递空指针时一样.