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)
这样做的正确方法是什么?谢谢!
您应该指定新地址realloc返回的指针
instrucao = realloc(instrucao, (i+1)*sizeof(char[2][10]));
Run Code Online (Sandbox Code Playgroud)
请注意,对于错误检查,您可能希望分配给新指针并检查NULL.另请注意parens - 您基本上只是添加i而不是乘以所需的大小.轻松监督.
请注意,不需要初始化calloc.只是初始化instrucao为NULL,并且realloc将像malloc第一次传递空指针时一样.