Witam. Piszę program, który ma za zadanie posortować plik tekstowy, w którym znajduje się 30 wierszy po 30 znaków. Ma posortować te wiersze alfabetycznie. Wszystko z dynamiczną alokacją pamięci.
Napisałem coś takiego:
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>
#include<errno.h>
int main(void)
{
FILE *wsk;
char **tab;
char *t;
char c;
int i = 0;
int j = 0;
if ((wsk = fopen("plik.txt", "r")) == NULL)
fprintf(stderr, "Blad otwarcia pliku: %s\n", strerror(errno));
else
{
tab = (char**) malloc(30 * sizeof(char*));
for (i = 0; i < 30; i++)
{
*(tab + i) = (char*) malloc(30 * sizeof(char));
}
while (((c = fgetc(wsk)) != NULL) && (c != EOF))
{
if (c == '\n')
{
tab[i][j] = c;
printf("%c", c);
i++;
j = 0;
}
else
{
tab[i][j] = c;
printf("%c", c);
j++;
}
}
if (fclose(wsk) != 0)
{
puts("Blad zamkniecia pliku");
exit(1);
}
}
getchar();
getchar();
return 0;
}
Ten fragment kodu skopiowałem z jakiejś strony:
tab = (char**) malloc(30 * sizeof(char*));
for (i = 0; i < 30; i++)
{
*(tab + i) = (char*) malloc(30 * sizeof(char));
}
bo nie znalazłem nic ciekawego na necie o przydzielaniu pamięci na tablice dwuwymiarowe. Dlatego też, tego kodu specjalnie nie rozumiem, wiem jednak tyle, że mogę się teraz odwoływać jak do normalnej tablicy np: tab[0][0] = 4;
Jeśli ktoś mógłby polecić mi jakieś źródło gdzie to jest lepiej opisane byłbym wdzięczny.
Wracając do tematu, program nie działa i zaznacz tą linijkę
tab[i][j] = c;
Moje pytanie dotyczy tego, czy jeśli mam plik tekstowy 30 wierszy po 30 znaków to powinienem alokować tablicę 30x32? Ze znakiem '\n' w 31 komórce i '\0' w 32? Nie wiem też bardzo dlaczego program nie pobiera znaków z pliku i zawiesza się, co robię źle?