Будучи лаконичным, я хочу прочитать файл и сохранить содержимое в двумерном массиве, где первое измерение относится к строке, а второе измерение - к символу в соответствующей строке. Я не знаю количество строк и столбцов в каждой строке заранее.
Код, который я пробовал, выглядит следующим образом.
П.С .: Я знаю, что имена переменных не так хороши XD
FILE *filepointer = fopen(commandlineargument.filtersfile, "r");
int numboflines = 0;
int numbofchars = 0;
char **array = malloc(numboflines + 1);
array[0] = malloc(numbofchars + 1);
char currentchar;
while(fscanf(filepointer, "%c", ¤tchar) != EOF)
{
if(currentchar != '\n')
{
array[numboflines][numbofchars] = currentchar;
numbofchars++;
array[numboflines] = realloc(array[numboflines], numbofchars + 1);
}
else
{
array[numboflines][numbofchars] = '\0';
numbofchars = 0;
numboflines++;
array = realloc(array, numboflines + 1);
}
}
array[numboflines] = '\0';
numboflines--;
С помощью приведенного выше кода я могу получить значение array[0][0]
и только до того, как оно перераспределится на две строки вниз (тогда array[0][0]
указывает на ноль). Я получаю ошибку сегментации позже.
P.S .: Я знаю, что приведенный выше код будет работать правильно, только если последняя строка оканчивается на \n
Пример желаемого вывода:
Содержимое файла:
>Abcde
fghijk
>Lmno
pq
Значения 2D массива:
array[0][0] = ">"
array[2][1] = "L"
и т. Д.