2016-09-09 4 views
-1

Я пытаюсь прочитать данные из текстового файла, используя различные функции, такие как fgetc(), fgets() и fscanf(). Во время выполнения программа заканчивается после чтения с fgetc().c программа завершается во время чтения из файла

#include <stdio.h> 

void writeFile(FILE *, char *); 
void readFile(FILE *,char *); 

void main(void){ 
    FILE *file; 
    char *path="temp/test.txt"; 
    printf("%s\n",path); 
    writeFile(file,path); 
    readFile(file,path); 
    return; 
} 

void readFile(FILE *file, char *path){ 
    file = fopen(path , "r"); 
    if(file) 
     printf("\n file opened"); 
    char *buff; 

    char getc = fgetc(file); 
    printf("\n 1 char :: %c ",getc); 

    getc = fgetc(file); 
    printf("\n 2 char :: %c ",getc); 
    fgetc(file); 

    fgets(buff,25,file); 
    printf("\n 3 gets :: %s ",buff); 

    fgets(buff,255,file); 
    printf("\n 4 gets :: %s ",buff); 

    int fscan = fscanf(file,"%s", buff); 
    printf("\n 5 fscan :: %s ",buff); 

    int eof= fclose(file); 
} 

void writeFile(FILE *file, char *path){ 
    file = fopen(path , "w+"); 
    if(file) 
     printf("\n file opened"); 
    char *fileStr= "this is not working"; 
    int putc = fputc('@',file); 
    fputc('!',file); 
    int puts = fputs("\nThis is test file.",file); 
    int putf1 = fprintf(file, "\n Kinldy help to solve this"); 
    int putf2 = fprintf(file, "\n%s", fileStr); 
    int eof= fclose(file); 
} 

Примечание: Если я комментирую writeFile(file,path); строку в программе, она выполняется должным образом.

+4

'символ * любитель;' -> 'символ любитель [255]; ' – BLUEPIXY

+0

Если вы объявляете' buff' с '255' символов, вы должны также установить' fscanf (файл "% 254s", buff); 'чтобы вы не переполняли (если у вас была непрерывная последовательность символов без пробелов, которая превысила бы размер' buff' - маловероятно, но для предотвращения неопределенного поведения вам следует) –

ответ

-1

Я внесла небольшие изменения в вашу программу, чтобы он читал файл и не получал предупреждений. Попробуйте, если это сработает для вас. Теперь это не заканчивается, и, надеюсь, это вам поможет.

#include <stdio.h> 

void writeFile(FILE *, char *); 

void readFile(FILE *, char *); 

void main(void) { 
    FILE *file = NULL; 
    char *path = "temp/test.txt"; 
    printf("%s\n", path); 
    writeFile(file, path); 
    readFile(file, path); 
    return; 
} 

void readFile(FILE *file, char *path) { 
    file = fopen(path, "r"); 
    if (file) 
     printf("\n file opened"); 
    char buff[255]; 

    int getc = fgetc(file); 
    printf("\n 1 char :: %c ", getc); 

    getc = fgetc(file); 
    printf("\n 2 char :: %c ", getc); 
    fgetc(file); 

    fgets(buff, 25, file); 
    printf("\n 3 gets :: %s ", buff); 

    fgets(buff, 255, file); 
    printf("\n 4 gets :: %s ", buff); 

    int fscan = fscanf(file,"%254s", buff); 
    printf("\n 5 fscan :: %s ", buff); 

    int eof = fclose(file); 
} 

void writeFile(FILE *file, char *path) { 
    file = fopen(path, "w+"); 
    if (file) 
     printf("\n file opened"); 
    char *fileStr = "this is not working"; 
    int putc = fputc('@', file); 
    fputc('!', file); 
    int puts = fputs("\nThis is test file.", file); 
    int putf1 = fprintf(file, "\n Kinldy help to solve this"); 
    int putf2 = fprintf(file, "\n%s", fileStr); 
    int eof = fclose(file); 
} 
Смежные вопросы