0 / 0 / 0
Регистрация: 18.06.2013
Сообщений: 4
1

Строковый массив считываем из файла

03.10.2013, 18:15. Показов 1662. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, уже несколько часов гуглю, вроде всё норм в коде, но не работает, прошу помощи:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
char line[255];
    char* massiv[30];
    int i=0;
    int c=0;
    switch(swit){
                 case 1:
                      system("cls");
                      FILE *table1;
                       table1=fopen("depo.txt","a+");
                           printf(" dep_n|     stanciya|  rab|    nachalnik| plan|  rem|     opl_rem|    zarplata \n");
                           printf("------+-------------+-----+-------------+-----+-----+------------+------------ ");
                           while (!feof(table1)){//файл считываем до концы
                                 i++;//нкрементируем индекс массива char* massiv[30]
                                 fgets(line,255,table1);// считываем построчно
                                 printf(line);// выводим построчно
                                 massiv[i]=line;// записываем строку в массив                      
                           }
                           c=i;//запоминаем индекс
                           printf("\n\n%d\n",c);//выводим индекс
                           for(i=1;i<c;i++){
                           printf("\n\nm:%d %s",i,massiv[i]);// выводим массив
                           //выводится с-раз последняя строка, в чем ошибка?
                           }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.10.2013, 18:15
Ответы с готовыми решениями:

Строковый массив (объявить пустой глобальный строковый массив из 16 элементов)
Подскажите, как объявить пустой глобальный строковый массив из 16 элементов? в качестве...

Получить строковый массив из файла
написать консольное приложение! вообщем нужно чтобы строковый массив брал текст из файла и потом...

Считываем текст из файла
Ребят, вот такой вопрос Есть файл in.txt, надо считать из него текст и отредактировать Всё хорошо...

Считать содержимое файла в строковый массив
Добрый день. Я подсчитала кол-во строк в файле (переменная x). Далее создаю массив с подсчитанной...

4
27 / 27 / 6
Регистрация: 27.09.2009
Сообщений: 101
03.10.2013, 19:21 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Можно сделать так:
C
1
2
3
4
5
6
7
8
9
10
11
12
char massiv[30][255];
/*..........................................*/
while (!feof(table1))
{           
     fgets(massiv[i],255,table1);
     printf(massiv[i++]);
}
/*..........................................*/
for(i=0;i<c;i++)
{
     printf("\n\nm:%d %s",i,massiv[i]);
}
1
0 / 0 / 0
Регистрация: 18.06.2013
Сообщений: 4
04.10.2013, 05:16  [ТС] 3
Если так, то вылет с ошибкой без кода, на строке, где записываем из файла строку в массив
так:
C
1
2
3
4
5
while (!feof(table1)){           
                                 fgets(line,255,table1);
                                 massiv[i]=line;
                                 printf(massiv[i++]);
                           }
без ошибки, но при выводе массива вне этого while снова выводит последнюю строку с-раз, честно не понимаю почему так

Добавлено через 9 часов 27 минут
На другой версии компилятора прокатило так
C
1
2
3
4
5
6
7
8
9
10
11
12
char massiv[30][255];
/*..........................................*/
while (!feof(table1))
{           
     fgets(massiv[i],255,table1);
     printf(massiv[i++]);
}
/*..........................................*/
for(i=0;i<c;i++)
{
     printf("\n\nm:%d %s",i,massiv[i]);
}
Большое тебе спасибо, Vivo
0
27 / 27 / 6
Регистрация: 27.09.2009
Сообщений: 101
04.10.2013, 13:58 4
Цитата Сообщение от kripokod Посмотреть сообщение
честно не понимаю почему так
Я думаю ошибка у вас в том, что вы присваиваете массиву указателей адрес переменной Line. И в итоге каждый элемент массива ссылается на значение переменной, а так как переменная в конце считывания файла равна последней строчке, то поэтому у вас и выводилась только эта строчка.
Цитата Сообщение от kripokod Посмотреть сообщение
Большое тебе спасибо, Vivo
Можете поблагодарить нажав кнопку "Спасибо"
0
213 / 202 / 85
Регистрация: 09.05.2012
Сообщений: 494
04.10.2013, 17:06 5
Как подсказал Vivo, ваша ошибка была в присваивании указателя на строку:
Цитата Сообщение от kripokod Посмотреть сообщение
C
1
massiv[i]=line;
В Си, по сравнению с Pascal, такое присвание не будет копировать содержимое одной строки в другую.
Для операций со строками в Си существует библеотека string.h. А для копирования содержимого одной строки в другую - функция strcpy(char*, const char*), и strncpy(char*, const char*, int); Разница между ними в том, что последняя контролирует выход за границу масива(т.е. третий параметр - размер буфера).
Таким образом, вам следовало бы сделать:
1) вместо char* massiv[30]; - char massiv[30][STRING_SIZE];, где STRING_SIZE - максимальное кол-во символов в строке(включая '\0').
2) вместо massiv[i]=line; - strncpy(massiv[i], line, STRING_SIZE);.
Если не выполнить п.1., но в то же время выполнить п.2 - получите ошибку времени выполнения, т.к. вы описали всего лишь указатели на строки(char* massiv[30]), которые указывают непонятно куда(на любое место в памяти могут указывать - зависит от мусора, который попадет в каждую из переменных массива massiv), а не на выделеную память, соотвественно strncpy будет писать в память чужой(а может и своей) программы.
1
04.10.2013, 17:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.10.2013, 17:06
Помогаю со студенческими работами здесь

Считываем определенный столбец из файла
Всем доброго времени суток! Возникла серьезная проблема (как минимум для новичка). Мне необходимо...

Из текстового файла считываем все слова и выводим их в другой файл по алфавиту
Здравствуйте, помагите пожалуйста с задачей для VB не выше 6.0 версии Из текстового файла...

Дан строковый файл. Создать новый строковый файл, содержащий все строки исходного файла наибольшей длины
Всем привет! Кто может помочь с двумя небольшими програмками по работе с файлами? Очень буду...

Дан строковый файл. Создать новый строковый файл, содержащий все строки исходного файла наименьшей длины (в том же порядке).
Даны имена двух файлов вещественных чисел. Известно, что первый из них существует и является...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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