Język C - dlaczego otrzymuję taki wynik ?

0

Witam. Chciałbym się dowiedzieć co jest nie tak z tym kodem?? Chodzi mi o to że gdy spróbuje wypisać element tablicy tik[0] lub tik[1] po zakonczeniu dzialania petli to są one takie same jak trzeci(ostatni element) tik[2].
W notatniku mam 3 wyrazy oddzielone przecinkami np: motor,pika,schody,

int main() {
char tab[10];
char *tik[5];
char zmienna;
int i,j;
FILE *fp;
if((fp=fopen("struktury.txt","r"))== NULL)printf("cos poszlo nie tak");
else printf("Dobra robota\n");

for (j=0; j<3; j++){
for(i=0; i<10; i++){
zmienna = getc(fp);
if(zmienna == ',')break;
tab[i] = zmienna;
}
tik[j] = tab;

printf("%s\n", tik[j]);
}printf("%s",tik[0]);

return 0;
}
1

Ustawiasz wszystkie wskaźniki na ten sam adres - tab, który jest nadpisywany co każdy obieg pętli.

4

Ponieważ to

tik[j] = tab;

nie wykona skopiowania zawartości tab do tik[j]. W tym miejscu ustawiasz wskaźnik, który dalej "pokazuje" na zawartość. Do wszystkich indeksów tablicy tik przypisujesz ten sam wskaźnik, który po wykonaniu pętli będzie pokazywał na wartość ustawioną w ostatniej iteracji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1