2009-06-21 120 views
0

我需要一個只能在一個維度上動態生成的多維字符數組...
我必須存儲一對長度爲10(或更少)的字符串,但每個字符串的長度都是可變的「對」。Dynamic Multidimensional array

我的想法是這樣的

char (*instrucao)[2][10]; 

,給了我一個指向字符的2×10陣列,但是當我做這樣的事,這是不正常:

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 

什麼是正確的方法來做到這一點? 謝謝!

回答

5

你應該分配指針realloc返回

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

注意,錯誤檢查,你可能希望分配到一個新的指針和檢查NULL新地址。還要注意這些parens - 你基本上只是增加了i而不是乘以所需的大小。輕鬆監督。

請注意,不需要初始calloc。只需初始化instrucaoNULL,並且realloc在首次傳遞空指針時的行爲將類似於malloc

+0

絕對正確...並通過我的舊代碼看,我注意到我從來沒有實際分配的指針realloc。好東西,我不用C專業工作,那麼!非常感謝 – Gabe 2009-06-21 21:48:03

0

你會找到一個容器滿足你的需求的圖書館。最壞的情況是,沒有更好的庫,你可以有兩個獨立的數組,每個數組都有一半。