0

我需要一个仅在一个维度上是动态的字符的多维数组...
我必须存储一对字符串,每个字符串的长度为 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, "() ");
}

拥有strInstrucoesas (abc,123) (def,456) (ghi,789),我不会像这样使用 3 行每行 2 对矩阵:

abc | 123
def | 456
ghi | 789

但相反,这就是我得到的:

abc | 123
def | 45def | 45de
ghi | 789

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

4

2 回答 2

5

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

instrucao = realloc(instrucao, (i+1)*sizeof(char[2][10]));

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

请注意,不需要初始calloc. 只需初始化instrucaoNULL, realloc 的行为就像malloc第一次传递空指针时一样。

于 2009-06-21T21:28:46.513 回答
0

您最好找到一个带有满足您需求的容器的库。在最糟糕的情况下,不使用任何更好的库,您可能会拥有两个独立的数组,每个数组都持有该数组的一半。

于 2009-06-21T21:20:41.333 回答