Предположим, swamp.txt
содержит:
marsh
bog
quagmire
morass
fen
и что вы хотите прочитать эти строки в массив swamp
в вашей программе.Тогда вы можете пересмотреть свой код в этом направлении.Обратите внимание, что это позволяет избежать открытия файла дважды, среди других операций очистки.
#include <stdio.h>
#define RIG 5
#define COL 11
int main(void)
{
const char filename[] = "swamp.txt";
FILE *fp = fopen(filename, "r");
if (fp == NULL)
{
fprintf(stderr, "failed to open file '%s' for reading\n", filename);
return -1;
}
char swamp[RIG][COL];
int i = 0;
while (i < RIG && fscanf(fp, "%10s", swamp[i]) == 1)
i++;
fclose(fp);
for (int j = 0; j < i; j++)
printf("%d: %s\n", j, swamp[j]);
return 0;
}
Вывод:
0: marsh
1: bog
2: quagmire
3: morass
4: fen
Обратите внимание, что код защищает от переполнения длинного файла путем подсчета словкак они читают.Вы уже проверили fopen()
- это было хорошо.Я улучшил сообщение об ошибке, хотя.По моему мнению, вам никогда не следует вызывать fopen()
с буквенной строкой для имени файла, потому что, когда вы сообщаете об ошибке при открытии файла, вам нужно указать имя файла в сообщении об ошибке, поэтому вам придется повториться.Я исправил тип массива, так что это двумерный массив char
, а не двумерный массив (неинициализированных) char
указателей.Я организовал передачу каждой строки массива в fscanf()
по очереди.Я также ограничил длину ввода для каждого слова, чтобы избежать переполнения.