Имея проблемы со слегка более сложным разделом кода, я удалился на него, но все же ошибка остается. Не могли бы вы бросить беглый взгляд на это и указать на мои ошибки?Запись проблемы в массив строк
//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);
Проблема возникает тогда, когда я пришел к печати через nomtab[0]
[7]
(nbnoeud = 8
, в данном случае), так как все значения (nomtab[0]
, nomtab[1]
и т.д.) равны конечное значение, которое было написано. Необычно, проверив, только перезаписанные элементы nomtab
перезаписаны. Например, после первого цикла nomtab[0]= Aaa
, а остальные равны null
; после второго контура nomtab[0]
& nomtab[1] = Baa
, а остальные равны null
(см. второе изображение). Я предполагаю, что для этого есть идиотично простое решение, но это делает незнание еще более невыносимым.
Я также пробовал использовать strcpy
, и ему это не понравилось.
Любые идеи?
Выход:
Вывод с проверкой содержимого массива после каждого цикла
strcpy должен работать. перед использованием strcpy вы выделили память для nomtab [a]? – 999k