2017-05-15 3 views
-1
char * file = malloc(buffer); 
assert(file != 0); 
char str[20]; 

snprintf(file, buffer, "%s/%s", newestDirName, fileInDir->d_name); 
FILE * input = fopen(file, "r"); // read 
fseek(input, 0, SEEK_END); 
fgets(str, 20, input); 
printf("str = %s \n", str); 

Le fichier que je suis en train de lire a la dernière ligne:fseek et fgets dans la programmation C pas utilisé correctement ici?

ROOM TYPE: END_ROOM 

Pourquoi str ne stocke pas « ROOM TYPE: END_ROOM »

Je pensais que fseek(input, 0, SEEK_END) obtient la dernière ligne avec le curseur à partir de la gauche position de la dernière ligne. Est-ce mal?

Je pensais fgets(str, 20, input) obtient 20 caractères de l'entrée et le met en str qui est une variable char *.

Mais je reçois du charabia pour la valeur de str quand j'imprimer str:

str = ▒▒As= 
+3

Selon vous, que va-t-on lire * suivant * à partir d'un fichier après que vous ayez recherché le * end *? –

+3

Vous cherchez à la fin du fichier; il n'y a rien à lire après la fin du fichier pour 'fgets()'. Il ne cherche pas au début de la dernière ligne avant la fin du fichier. Notez que 'fgets (str, 20, input)' lit jusqu'à 19 caractères et place un octet nul après le dernier caractère. Il peut lire moins de 19 caractères si la nouvelle ligne apparaît avant le 19ème caractère, et ajoute un octet nul à la 20ème position. Vous devriez toujours tester la valeur de retour des fonctions d'entrée - la valeur de retour de 'fgets()' serait NULL indiquant EOF. Et sur EOF, la chaîne n'est définie à aucune valeur déterminée. –

Répondre

0

Si vous devez utiliser fgets, vous pouvez essayer this.However, rien ne garantit que le nombre de caractères dans une ligne ne dépasse pas 20 caractères, Surtout si le nombre de caractères est variable sur chaque ligne.

char str[20]={0}; 
FILE * input = fopen("file.txt", "r"); // read 
if(input) 
{ 
    char *ptr;/*Warns you if you have reached the end of the file or some error*/ 
    do 
    { 
     ptr=fgets(str, 20, input); 
    } while(ptr); 
    if(str) 
     printf("str = %s \n", str); 
    fclose(input); 
}