Построчное чтение файла в массив - 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 количество прочтённых строк */
Объяснение кода листинга программы
- Объявлен массив
storedтипаcharразмером 1000 строк по 80 символов каждая. - Объявлена переменная
readenтипаintдля подсчёта количества прочитанных строк. - Запущен цикл
for, который будет выполняться, пока не будут выполнены два условия:readenменьше 1000.fgets()успешно прочитает строку вstored[readen].
- Внутри цикла
forпроисходит следующее:- Увеличивается значение
readenна единицу. - Ничего не записывается в
stored[readen]. - Если
fgets()вернулNULL, то есть достигнут конец файла или произошла ошибка, то цикл прекращается.
- Увеличивается значение
- После выполнения цикла, в переменной
readenбудет храниться количество прочитанных строк.