Witam.
Piszę grę w C i potrzebuję wczytać nazwy kolejnych map z pliku do tablicy. Ilość map nie jest znana, długość nazwy pojedynczej mapy nie może przekraczać 40 znaków. Przykładowo plik wygląda w ten sposób (liczba na początku to ilość map, potem w każdej linijce jest nazwa kolejnej mapy):
2
map1.m
map2.m
W funkcji main deklaruję tablicę nazw map i zmienną przechowującą ich ilość:
char **maps; // ścieżki do kolejnych map
int number_of_maps; // liczba map
I mam funkcję, której zadaniem jest odpowiednie zainicjalizowanie tej tablicy i przypisanie do niej kolejnych nazw map z pliku:
// LoadMapsPathL: ładuje ścieżki do map z podanego pliku (w przypadku niepowodzenia zwraca false)
static bool LoadMapsPathL(const char* const path, char*** maps, int* number_of_maps)
{
FILE* file = fopen(path, "r");
if (!file)
return false;
// zmienne pomocnicze:
int i;
char temp[32];
fscanf(file, "%d", number_of_maps);
*maps = malloc(*number_of_maps * sizeof **maps);
if (!*maps)
return false;
for (i = 0; i < *number_of_maps; ++i)
{
*maps[i] = malloc(40 * sizeof ***maps);
fscanf(file, "%s", temp);
strcpy(*maps[i], temp);
}
fprintf(stdout, "In function:\n");
for (i = 0; i < *number_of_maps; ++i)
{
fprintf(stdout, "%d: %s\n", i, *maps[i]);
}
return true;
}
W celu sprawdzenia poprawności wykonywanego kodu wywołuję pętle która wyświetla nazwy kolejnych map.
W main wywołuję tą funkcję:
// inicjalizujemy ścieżki do kolejnych map:
LoadMapsPathL("maps", &maps, &number_of_maps);
int i;
fprintf(stdout, "In main:\n");
for (i = 0; i < number_of_maps; ++i)
{
fprintf(stdout, "%d: %s\n", i, maps[i]);
}
W celu sprawdzenia poprawności wykonywanego kodu ponownie wywołuję pętle sprawdzająca czy tablica maps przechowuje odpowiednie nazwy map. Niestety skompilowanie i uruchomienie tego kodu wypisze na konsolę:
In function:
1: map1.m
2: map2.m
In main:
1: map1.m
2: (Null)
Czyli z tego wynika, że informacja o 2 wartości w tablicy nie jest poprawnie zapisywana w funkcji. Generalnie próbowałem już to zrobić na kilka sposobów, szukałem też o tym informacji na forach, ale bez skutku. Byłbym wdzięczny za każdą sugestię co robię źle lub jak można to zrobić poprawnie. Z góry bardzo dziękuje, gdyż sam jestem już bez pomysłu.
Pozdrawiam