Je suis totalement nouveau en C, et j'essaie de faire une petite application qui cherche une chaîne dans un fichier. Mon problème est que j'ai besoin d'ouvrir un gros fichier (plus de 1 Go) avec juste une ligne à l'intérieur et que fgets me renvoie le fichier entier (je fais un test avec un fichier de 10 Ko).fgets dans C ne retourne pas une partie d'une chaîne
En fait, ceci est mon code:
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
char *search = argv[argc-1];
int retro = strlen(search);
int pun = 0;
int sortida;
int limit = 10;
char ara[20];
FILE *fp;
if ((fp = fopen ("SEARCHFILE", "r")) == NULL){
sortida = -1;
exit (1);
}
while(!feof(fp)){
if (fgets(ara, 20, fp) == NULL){
break;
}
//this must be a 20 bytes line, but it gets the entyre 10Kb file
printf("%s",ara);
}
sortida = 1;
if(fclose(fp) != 0){
sortida = -2;
exit (1);
}
return 0;
}
Que puis-je faire pour trouver une chaîne dans un fichier?
J'ai essayé avec GREP mais cela n'aide pas, car il renvoie la position: ENTIRE_STRING.
Je suis ouvert aux idées.
Que voulez-vous dire exactement par votre commentaire, _ce doit être une ligne de 20 octets, mais il obtient le fichier entier 10KB_? Voulez-vous dire que les 10 Ko entiers sont imprimés sur une ligne? (Comment pouvez-vous dire la différence si les 10 Ko entiers sont sortis en une fois ou si les morceaux 20B sont sortis un à la fois, si vous n'incluez pas de caractère séparateur après chaque opération d'impression? Il est impossible de faire la différence. réponse semblerait raisonnable.) – stakx
feof + fgets n'est pas bon. voir http://c-faq.com/stdio/feof.html. – Nyan
@stakx, c'est pour le \ n manquez. Au moment c'est OK :). Merci pour votre attention. – Marc