[C] Fichier
Gaz
Messages postés
4
Statut
Membre
-
batmat Messages postés 1871 Statut Membre -
batmat Messages postés 1871 Statut Membre -
lu all
alors voila en fait je lis un fichier en c et le probleme c'est que ce fichier est composé de lignes dont la taille exècede largement les 80 caractères autorisés!!
Moi j'ai besoin de lire toutes les lignes donc Ze question iS : comment faire pour contourner ce probleme ?
***********************************************************
le programme donne ca :
#include <stdio.h>
int main(int argc, char *argv[])
{
int i;
FILE *fich1 ;
int pos;
char *detail;
fich1 = fopen("D:\\L0527000.log", "rb");
if (fich1 == NULL)
{
printf("erreur");
}
else
{
printf("\n c bon");
}
i=fseek(fich1,0,SEEK_SET);
printf("\n ligne : %d",i);
fgets(detail,80,fich1);
printf("\n %s", detail);
getch();
return 0;
}
********************************************************
Si on met + de 80 dans fgets ca bugg total
et si on laisse 80 ca marche mais la ligne est incomplete dans la fenetre dos ouù ca s'affiche.
thx d'avance ca presse .
alors voila en fait je lis un fichier en c et le probleme c'est que ce fichier est composé de lignes dont la taille exècede largement les 80 caractères autorisés!!
Moi j'ai besoin de lire toutes les lignes donc Ze question iS : comment faire pour contourner ce probleme ?
***********************************************************
le programme donne ca :
#include <stdio.h>
int main(int argc, char *argv[])
{
int i;
FILE *fich1 ;
int pos;
char *detail;
fich1 = fopen("D:\\L0527000.log", "rb");
if (fich1 == NULL)
{
printf("erreur");
}
else
{
printf("\n c bon");
}
i=fseek(fich1,0,SEEK_SET);
printf("\n ligne : %d",i);
fgets(detail,80,fich1);
printf("\n %s", detail);
getch();
return 0;
}
********************************************************
Si on met + de 80 dans fgets ca bugg total
et si on laisse 80 ca marche mais la ligne est incomplete dans la fenetre dos ouù ca s'affiche.
thx d'avance ca presse .
A voir également:
- [C] Fichier
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
3 réponses
Il y une ENORME erreur, ou plutôt un oubli...
Tes docs ou tes profs ont pourtant du insister... Tu mets dans detail des caractères, alors que tu n'as alloué aucune mémoire pour ce pointeur...
fais plutôt :
Le 80 n'a rien à voir avec ton bug, c'est juste que tu tapes dans une mémoire qui ne t'appartient pas... C'aurait pu arriver avant ou après...
Je ne sais pas trop ce que tu cherches à afficher avec :
>i=fseek(fich1,0,SEEK_SET);
>printf("\n ligne : %d",i);
fseek renvoie 0 si elle a réussi, -1 sinon... Pas le numéro de ligne :)
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
Tes docs ou tes profs ont pourtant du insister... Tu mets dans detail des caractères, alors que tu n'as alloué aucune mémoire pour ce pointeur...
fais plutôt :
//en haut de ton code, avec les include
#define BUF_LEN 80
//tu remplaces ta déclaration de detail par :
char detail[BUF_LEN+1];
//et le fgets
fgets(detail,BUF_LEN,fich1);
Le 80 n'a rien à voir avec ton bug, c'est juste que tu tapes dans une mémoire qui ne t'appartient pas... C'aurait pu arriver avant ou après...
Je ne sais pas trop ce que tu cherches à afficher avec :
>i=fseek(fich1,0,SEEK_SET);
>printf("\n ligne : %d",i);
fseek renvoie 0 si elle a réussi, -1 sinon... Pas le numéro de ligne :)
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
Ah oui, ajoutes aussi return 1 après le printf au cas où le fichier ne serait pas ouvert : fo pas continuer dans ce cas, sinon tu auras des erreurs encore plus aberrantes...
Autre chose : qd on déclare un pointeur (ou qd on le libère) il faut toujours le mettre à NULL, ça te permet de détecter les erreurs... Ici, fgets t'aurait jeté tout de suite sans te faire croire que ça allait :) :
exemple :
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
Autre chose : qd on déclare un pointeur (ou qd on le libère) il faut toujours le mettre à NULL, ça te permet de détecter les erreurs... Ici, fgets t'aurait jeté tout de suite sans te faire croire que ça allait :) :
exemple :
char *x=NULL;
x=(char*)malloc(15*sizeof(char));
//... tu joues avec ta chaine
//tu la libères :
free(x);
x=NULL; //on remet à NULL le pointeur désalloué
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?