Witam,
Mam problem przy wstawianiu danych do tablicy struktur. Dane wczytuje z pliku, więc dzieje to się w pętli i tam są dobrze czytane. Gdy wyjdę poza zakres tej pętli i próbuje odczytać dane o tych samych indeksach to dostaje jakieś śmieci.
Mój kod:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define M 100
struct words
{
int nr;
char* nazwisko;
} T[M];
int main()
{
int i;
// Wyzerowanie tablicy
for (i = 0; i < M; i++)
{
T[i].nr= 0;
T[i].nazwisko = '\0';
}
// Wstawianie do tablicy
FILE* nazwiska = fopen("nazwiska.txt", "r");
i = 0;
char word[256];
while (fgets(word, 255, nazwiska) != 0 && i != M)
{
int nr = atoi(strtok( word, " " ));
char* nazwisko = strtok( NULL, "\n" );
T[i].nr= nr;
T[i].nazwisko = nazwisko;
printf("%i %s\n", T[i].nr, T[i].nazwisko); //tutaj poprawnie odczytuje dane
i++;
}
fclose(nazwiska);
// Wyświetlenie tablicy
printf("ID\tNR\tNAZWISKO\n");
for (i = 0; i < M; i++)
printf("%i\t%i\t%s\n", i, T[i].nr, T[i].nazwisko); //jednak już tutaj uzyskuje śmieci
return 0;
}
W pliku znajdują się dane w formacie <nr><spacja><nazwisko><znak_przejscia_do_kolejnej_linii> -> można go pobrać stąd - http://www.futrega.org/etc/nazwiska.zip (najlepiej zamienić polskie znaki na angielskie, żeby nie było problemów).
Co ciekawe T[i].nr wyświetla się poprawnie (porównywałem z plikiem), a T[i].nazwisko wyświetla zawsze 2 wyraz licząc od ostatniego przeglądanego i to nie zawsze cały. W czym może tkwić problem?
Z góry dziękuję za wszelką pomoc.
Pozdrawiam,
brando.