Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение и вывод файла 
:(
    Опции темы
N0rt0N
Дата 24.9.2008, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 20.5.2007

Репутация: нет
Всего: нет



Задача в следующем, нужно написать функцию на C, которая бы считывала указанный текстовый файл и печатала его содержимое на экран. Как это можно сделать? Пытался так:
Код

void catFile(char *s0, char *s1, char *s2) 
{ FILE *cfPtr; 
char *rwfile; 
if(strcmp(s0, "") && !strcmp(s1, "") && !strcmp(s2, "")) { /*cat file.name*/ 
if((cfPtr = fopen(s0, "r")) == NULL) 
puts("File could not be opened"); 
else { while(!feof(cfPtr)) { fread(rwfile, sizeof(char), 1, cfPtr); } 
if(!strcmp(rwfile,"")) { puts(rwfile); } fclose(cfPtr); } }

но в ответ получал только Segmentation Fault Помогите пожалуйста разобраться!
Заранее спасибо!

PM MAIL   Вверх
vinter
Дата 24.9.2008, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 8
Всего: 56



память под rwfile, кто будет выделять?


--------------------
Мой блог
PM MAIL WWW   Вверх
N0rt0N
Дата 24.9.2008, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 20.5.2007

Репутация: нет
Всего: нет



vinter
А как это лучше сделать? Как раз этого я и не мойму: char *rwfile = (char *) malloc (size);
А вот сколько должен быть size? Ведь изначально размер считываемого файла неизвестен...

Это сообщение отредактировал(а) N0rt0N - 24.9.2008, 12:25
PM MAIL   Вверх
Andrey44
Дата 24.9.2008, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 2
Всего: 26



Код

    
void catFile(char *s0, char *s1, char *s2) 

FILE *cfPtr; 
char *rwfile; 
if(strcmp(s0, "") && !strcmp(s1, "") && !strcmp(s2, ""))
{ /*cat file.name*/ 
     if((cfPtr = fopen(s0, "r")) == NULL) 
          puts("File could not be opened"); 
     else 
     {
           while(!feof(cfPtr))
           {
                fread(rwfile, sizeof(char), 1, cfPtr); 
           } 
     if(!strcmp(rwfile,"")) 
     { 
          puts(rwfile); 
     }
      fclose(cfPtr); 
}
}


Ну так-же намного приятнее читать?
N0rt0N,  как вы думаете?

Это сообщение отредактировал(а) Andrey44 - 24.9.2008, 12:30


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
N0rt0N
Дата 24.9.2008, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 20.5.2007

Репутация: нет
Всего: нет



Andrey44
да, спасибо smile
PM MAIL   Вверх
vinter
Дата 24.9.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 8
Всего: 56



Цитата

FILE *file;
fseek(END_OF_FILE);
size_t nFileSize = ftell(file); 
fseek(BEGIN_OF_FILE);

это псевдокод, я не помню параметры этих ф-ий найди их сам. Думаю идея ясна


--------------------
Мой блог
PM MAIL WWW   Вверх
knitmax87
Дата 24.9.2008, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 18.3.2006

Репутация: нет
Всего: 1



Вот так вроде работает:
Код

#include <stdio.h>

int main()
{
    FILE * filePtr;
    char * rwfile;
    filePtr = fopen("test.txt", "rb");
    if (NULL != filePtr)
    {
        fseek(filePtr, SEEK_SET, SEEK_END);
        long fsize = ftell(filePtr);
        fseek(filePtr, SEEK_SET, 0);

        rwfile = new char[fsize+1];
        rwfile[fsize] = '\0';

        fread(rwfile, sizeof(char), fsize, filePtr);
        fclose(filePtr);

        printf("%s", rwfile);
    }
    else
    {
        printf("File couldn't be opend");
    }
    return 0;
}

PM MAIL ICQ GTalk   Вверх
Andrey44
Дата 24.9.2008, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 2
Всего: 26



knitmax87, позволю себе дополнить ваш код одной строчкой. smile 
Код

delete rwfile;



--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
vinter
Дата 24.9.2008, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 8
Всего: 56



Andrey44
Цитата(Andrey44 @  24.9.2008,  15:14 Найти цитируемый пост)
delete []rwfile;




--------------------
Мой блог
PM MAIL WWW   Вверх
N0rt0N
Дата 24.9.2008, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 20.5.2007

Репутация: нет
Всего: нет



Все получилось! Огромное спасибо за помощь!
PM MAIL   Вверх
Andrey44
Дата 24.9.2008, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 2
Всего: 26



vinter, совсем не обязательно нужны [] !


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
knitmax87
Дата 24.9.2008, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 18.3.2006

Репутация: нет
Всего: 1



Цитата(Andrey44 @ 24.9.2008,  14:14)
knitmax87, позволю себе дополнить ваш код одной строчкой. smile 
Код

delete rwfile;

Согласен, забыл smile
PM MAIL ICQ GTalk   Вверх
vinter
Дата 24.9.2008, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 8
Всего: 56



Цитата(Andrey44 @  24.9.2008,  15:53 Найти цитируемый пост)
vinter, совсем не обязательно нужны [] !

обязательно. new\delete и new[]\delete[]/ Если new[]\delete, то это UB 


--------------------
Мой блог
PM MAIL WWW   Вверх
Andrey44
Дата 25.9.2008, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 2
Всего: 26



vinter, да точно, что-то я тормознул smile 


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
NebelDT
Дата 30.9.2008, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 29.9.2008
Где: RU

Репутация: -6
Всего: -10



Этот пример даже с обработкой данных) smile 
Код

#include <stdio.h >
#include <string.h>
#include <stdlib.h>
main()
{
int P=0,L=0;
char NAZ[22],STR[4],FAM[10],CDD[2],TIR[7];
struct COMP{
char NAZ[22];char STR[4];char FAM[10];
char CDD[2]; char TIR[7];
};
COMP X;
FILE *one;
if((one=fopen("MUSIC.txt", "w+"))==NULL){
  puts("\n(((OSHIBKA)))\n");
  fflush(stdin);
  getchar();
  return (0);
}
puts("(((FAYL MUSIC.txt OPEN)))\n");
puts("(((VIBERITE PORAMETR POISKA[1,2,3,4 ILI 5])))\n");
scanf("%d",&P);
if(P==1){scanf("%22s",&NAZ);}
if(P==2){scanf("%4s",&STR); }
if(P==3){scanf("%10s",&FAM);}
if(P==4){scanf("%2s",&CDD); }
if(P==5){scanf("%7s",&TIR); }
while(!feof(one)){
     fscanf(one,"%22s",&X.NAZ);
     if(strcmp(X.NAZ,NAZ)==0){L++;}
     fscanf(one,"%4s",&X.STR);
     if(strcmp(X.STR,STR)==0){L++;}
     fscanf(one,"%10s",&X.FAM);
     if(strcmp(X.FAM,FAM)==0){L++;}
     fscanf(one,"%2s",&X.CDD);
     if(strcmp(X.CDD,CDD)==0){L++;}
     fscanf(one,"%7s",&X.TIR);
     if(strcmp(X.TIR,TIR)==0){L++;}
if(L==1){
printf("%22s%4s%10s%2s%7s\n",X.NAZ,X.STR,X.FAM,X.CDD,X.TIR);L=0;}
fprintf(one,"%22s%4s%10s%2s%7s\n",X.NAZ,X.STR,X.FAM,X.CDD,X.TIR);
}
fclose(one);
fflush(stdin);
getchar();
return(0);
}        

PM MAIL WWW YIM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0998 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.