Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/48: Рейтинг темы: голосов - 48, средняя оценка - 4.98
160 / 160 / 30
Регистрация: 09.11.2012
Сообщений: 1,008
1

Построчное чтение файла в массив

09.11.2012, 09:17. Показов 8709. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
доброго всем своими силами изучаю C. Поставил себе задачу:
Есть некий файл. Нужно читать его построчно и писать в массив строки, затем вывести их на экран.
Ни с файлами, ни с массивами и строками работать не умею

Как я пытался решить задачу:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#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)
Помогите словом и делом, пожалуйста
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.11.2012, 09:17
Ответы с готовыми решениями:

Построчное чтение из файла
Необходимо построчно прочитать данные из файла, из разобрать их по переменным. Образец данных в...

Построчное чтение из файла
в файле числа от -50 до 50, записанные каждое в отдельной строке. нужно посчитать сумму...

Построчное чтение из файла
Всем привет! Помогите написать функцию построчного вывода из файла. Условно, есть файл с таким...

Построчное чтение файла
Подскажите как читать файл построчно что бы работало примерно так сначала читается 1 строка из...

6
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
09.11.2012, 09:28 2
Цитата Сообщение от mokojumbot Посмотреть сообщение
char stored[1000][80]; // массив из 1000 строк длинной по 80 символов
Цитата Сообщение от mokojumbot Посмотреть сообщение
stored[i][sizeof(stroka)] = stroka;
этим ты переопределяешь размер массива на этапе исполнения, а тебе нужно скопировать строку
смотри в сторону memcpy
http://ru.wikipedia.org/wiki/Memcpy
да и нолик в конце строки не забудь поставить

Добавлено через 1 минуту
Цитата Сообщение от mokojumbot Посмотреть сообщение
printf("%s\n",stored);
Цитата Сообщение от mokojumbot Посмотреть сообщение
предупреждение: format «%s» expects argument of type «char *», but argument 2 has type «char (*)[80]» [-Wformat]
ты весь массив вывести пытаешься?
C++
1
printf("%s\n",stored[i])
0
160 / 160 / 30
Регистрация: 09.11.2012
Сообщений: 1,008
09.11.2012, 09:45  [ТС] 3
А более простыми методами (без memcpy) можно обойтись?
Как правильно скопировать строку из fgets в массив строк? Длина строки везде разная, но, предположим, не больше 80.

Вывести пытаюсь непустые строки массива (те, которые, вроде как записались со счетчиком i)
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
09.11.2012, 09:56 4
Цитата Сообщение от mokojumbot Посмотреть сообщение
А более простыми методами (без memcpy) можно обойтись?
не знаю проще или нет но строки можно заполнять sprintf
http://vsokovikov.narod.ru/New... printf.htm
или используй тип string
http://subscribe.ru/archive/co... 04423.html
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
09.11.2012, 10:45 5
mokojumbot, Вам кто-то запрещает читать сразу в массив?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
09.11.2012, 11:12 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

mokojumbot, переменная stroka объявлена, как указатель на переменную типа char, мало того, ничем не инициализирована, то есть не указывает на какой-либо пригодный для размещения символов участок памяти (разве-что по чистой случайности). С другой стороны уже есть заранее выделенный массив строк, вот в них же сразу строки из файла и читайте:
C
1
2
3
4
5
6
char stored[1000][80];
int readen;
/*...*/
for ( readen = 0; readen < 1000 && fgets(stored[readen], 80, f); ++readen )
     ;
/* вот и всё чтение, в readen количество прочтённых строк */
0
160 / 160 / 30
Регистрация: 09.11.2012
Сообщений: 1,008
09.11.2012, 11:18  [ТС] 7
Благодарю откликнувшихся
Прочитал сразу в массив, спасибо гостю. Проблема была в незнании о существовании
C
1
feof();
решил так:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
 
 
int main(int argc, char const *argv[])
{
 
    char stored[1000][80];
 
    FILE *f;
    f = fopen("cfg", "r");
 
    int i = 0;
 
    while(!feof(f))
    {
        fgets(stored[i], 80, f);
        i++;
    }
    
    fclose(f);
 
    for(;i>=0;i--)
        printf("%s\n",stored[i]);
    
}
0
09.11.2012, 11:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.11.2012, 11:18
Помогаю со студенческими работами здесь

Построчное чтение из файла
Из файла нужно построчно считать числа типа double и записать в массив. Файл примерно выглядит...

Построчное чтение данных из файла
Есть фаил: selulhmb 83 86 77 82 glrdos 54 48 3 35 canryx 15 59 5 26 cdqqri 45 0 66 37 bxdsj 49...

Построчное чтение из файла сделать оптимальнее
Есть вот такой код(linux, компилятор gcc), читающий файл построчно: void fun(...) { ...

Построчное чтение неопределенного количества чисел из файла
Здраствуйте. У меня программа построчно читает числа из файла в масив. Потом выполняется сортировка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru