2016-09-09 16 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

'字符* BUFF;' - >'字符的buff [255];' – BLUEPIXY

+0

如果声明'和'255'字符buff',你也应该设置'的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); 
}