2016-09-09 4 views
-1

J'essaie de lire les données du fichier texte en utilisant une fonction différente comme fgetc(), fgets() et fscanf(). Pendant l'exécution, le programme se termine après avoir lu fgetc().c le programme se termine pendant la lecture du fichier

#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); 
} 

Note: Si je commente writeFile(file,path); ligne dans le programme, il exécute correctement.

+4

buff 'char *;' -> 'buff char [255];' – BLUEPIXY

+0

Si vous déclarez 'buff' avec' 255' caractères, vous devez également définir 'fscanf (fichier "% 254 s", buff), 'pour vous assurer de ne pas déborder (si vous avez une séquence ininterrompue de caractères sans espace qui dépasserait la taille de' buff' - peu probable, mais pour éviter un comportement indéfini, vous devriez) –

Répondre

-1

J'ai apporté quelques petites modifications à votre programme afin qu'il lise le fichier et ne reçoive pas d'avertissement. S'il vous plaît essayez si cela fonctionne pour vous. Il ne se termine pas maintenant et j'espère que cela vous aidera.

#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); 
}