在稍微複雜的一段代碼中遇到問題後,我已經刪除了它,但錯誤依然存在。你能對此粗略的看一眼並指出我的錯誤嗎?向字符串數組寫入問題
//before this, nbnoeud is defined and graphe is a stream that reads from a .txt file
double* xtab = (double *) calloc(nbnoeud, sizeof(double));
double* ytab = (double *) calloc(nbnoeud, sizeof(double));
char** nomtab = (char **) calloc(nbnoeud, 100*sizeof(char));
double x, y; char nom[100]; int numero=0, scancheck;
int a;
for(a=0; a<nbnoeud; a++){
scancheck = fscanf(graphe, "%d %lf %lf %[^\n]", &numero, &x, &y, nom);
if(scancheck = 4) printf("Read item %d; \t Scancheck: %d; \t %s - (%lf, %lf). \n", numero, scancheck, nom, x, y);
xtab[a] = x;
ytab[a] = y;
nomtab[a] = nom; I imagine it's something to do with compatibility of this but to my eyes it all checks out
/*int b; //this section just illustrates that only the previously accessed elements are being overwritten. See code2.png
for(b=0; b<=nbnoeud; b++){
printf("%s \n", nomtab[b]);
}*/
}
for(a=0; a<nbnoeud; a++){
printf("Read item %d; \t \t \t %s - (%lf, %lf). \n", a, nomtab[a], xtab[a], ytab[a]);
}
exit(1);
產生的問題是,當我穿過[7]
打印nomtab[0]
(nbnoeud = 8
,在這種情況下),因爲所有的值(nomtab[0]
,nomtab[1]
等)等於被寫入最終值。奇怪的是,經過檢查,只有nomtab
已被訪問的元素被覆蓋。例如,在第一個循環之後,nomtab[0]= Aaa
和其餘的等於null
;在第二個循環後,nomtab[0]
& nomtab[1] = Baa
和其餘的等於null
(見第二圖)。我認爲對此有一個虛擬的簡單解決方案,但這會讓不知道的事情變得更加不能容忍。
我也試過使用strcpy
,它不喜歡那樣。
任何想法?
輸出:
輸出與數組內容檢查每一個循環之後
strcpy應該可以工作。在使用strcpy之前,你是否爲nomtab [a]分配內存? – 999k