Mam pewien problem i właściwie nie wiem, dlaczego się tak dzieje. Mam funkcję:
int wczytajUczniow(uczen *listaUczniow, char* nazwaPliku)
gdzie uczeń to struktura. Funkcję wywołuję w następujący sposób:
iloscUczniow = wczytajUczniow(listaUczniow, "plik.txt");
gdzie listaUczniow to dynamiczna tablica struktur uczen. No i implementacja funkcji:
int wczytajUczniow(uczen *listaUczniow, char* nazwaPliku)
{
int i, j, iloscUczniow;
FILE *fp;
char dane[512];
double liczba;
if((fp = fopen(nazwaPliku, "r")) == NULL)
{
printf("Nie udalo sie otworzyc pliku!");
return 0;
}
fscanf(fp, "%d", &iloscUczniow);
listaUczniow = (uczen*) malloc(sizeof(uczen)*((int)iloscUczniow));
for(i = 0; i < iloscUczniow; i++)
{
fscanf(fp, "%s", dane);
listaUczniow[i].imie = (char*)malloc(sizeof(char)*strlen(dane));
strcpy(listaUczniow[i].imie, dane);
fscanf(fp, "%s", dane);
listaUczniow[i].nazwisko = (char*)malloc(sizeof(char)*strlen(dane));
strcpy(listaUczniow[i].nazwisko, dane);
fscanf(fp, "%s", listaUczniow[i].klasa);
fscanf(fp, "%s", dane);
listaUczniow[i].srednia = charToDouble(dane);
fscanf(fp, "%s", dane);
listaUczniow[i].dyscypliny = (dyscyplina*)malloc(sizeof(dyscyplina)*charToDouble(dane));
listaUczniow[i].iloscDyscyplin = 0;
}
fclose(fp);
printf("\nWczytano uczniow poprawnie.\n");
return iloscUczniow;
}
Pytanie brzmi następująco: dlaczego dane widoczne są tylko w tej funkcji, a po wyjściu, czyli gdy próbuję je wypisać w mainie, wyświetlają się krzaczki (czytaj śmieci z pamięci). Funkcja sortująca wygląda identycznie, jeśli chodzi o deklarację oraz wywoływanie i tam elementy zamieniają się miejscami, co widać również w mainie.