Построчное чтение файла в массив - C (СИ)

Узнай цену своей работы

Формулировка задачи:

доброго всем своими силами изучаю C. Поставил себе задачу: Есть некий файл. Нужно читать его построчно и писать в массив строки, затем вывести их на экран. Ни с файлами, ни с массивами и строками работать не умею Как я пытался решить задачу:
#include <stdio.h>

int main(int argc, char const *argv[])
{
 
    char *stroka; // текущая строка
    char stored[1000][80]; // массив из 1000 строк длинной по 80 символов
 
    FILE *f;
    f = fopen("textmassive", "r");
 
    int i = 0; // счетчик строк
    while(fgets(stroka, 80, f) != NULL) // пока есть строки читаем их в stroka
    {
        //printf("%s\n", stroka); // -- работает
        stored[i][sizeof(stroka)] = stroka;
        i++;
    }

    fclose(f);
 
    while(i)
    {
        printf("%s\n",stored);
        i--;
    }
    
}
компиляция:
gcc -o x x.c 
x.c: В функции «main»:
x.c:19:29: предупреждение: в присваивании указатель преобразуется в целое без приведения типа [по умолчанию включена]
x.c:28:3: предупреждение: format «%s» expects argument of type «char *», but argument 2 has type «char (*)[80]» [-Wformat]
запуск:
 ./x
Ошибка сегментирования (core dumped)
Помогите словом и делом, пожалуйста

Решение задачи: «Построчное чтение файла в массив»

textual
Листинг программы
char stored[1000][80];
int readen;
/*...*/
for ( readen = 0; readen < 1000 && fgets(stored[readen], 80, f); ++readen )
     ;
/* вот и всё чтение, в readen количество прочтённых строк */

Объяснение кода листинга программы

  1. Объявлен массив stored типа char размером 1000 строк по 80 символов каждая.
  2. Объявлена переменная readen типа int для подсчёта количества прочитанных строк.
  3. Запущен цикл for, который будет выполняться, пока не будут выполнены два условия:
    • readen меньше 1000.
    • fgets() успешно прочитает строку в stored[readen].
  4. Внутри цикла for происходит следующее:
    • Увеличивается значение readen на единицу.
    • Ничего не записывается в stored[readen].
    • Если fgets() вернул NULL, то есть достигнут конец файла или произошла ошибка, то цикл прекращается.
  5. После выполнения цикла, в переменной readen будет храниться количество прочитанных строк.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.375 из 5
Похожие ответы