PADYVEN
Messages postés69Date d'inscriptionlundi 10 février 2003StatutMembreDernière intervention29 août 2012
-
17 nov. 2007 à 21:42
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 2009
-
17 nov. 2007 à 21:58
Si quelqu'un peut jeter un oeil sur ce code et le critiquer merci
(constructive les critiques :-))
j'ai un probleme tout bete
ce programme lit un fichier texte le stocke dans un char *
puis on parcours le char etoile pour creer un tableau de pointeur
pour chaque debut de ligne
tout marche correctement sauf quand je veux afficher a la fin
car le printf %s attend un \0 pour terminer la chaine hors je n'en mais pas
et je ne veux pas reallouer mon char * 36000000 de fois
si quqlqun peut me dire comment corriger et ameliorer ca ce serait sympa
merci d'avance
//**********************************************
void LitFichier44()
{//ouvre un fichier le stocke dans un char*
int longeur=0;
FILE* fichier = NULL;
char **tableauligne=NULL;
char *letexte=NULL;
long nbrlignes=0;
long i=0,
long j=0;
fichier = fopen("test.txt", "r"); //ouvre le fichier en lecture
if (fichier != NULL)
{
//nombre de char du fichier
fseek(fichier, 0, SEEK_END); //se positionne a la fin
longeur=ftell(fichier); //longeur=taille du fichier
printf("longeur du fichier %ld\n",longeur);
//fout le fichier dans un char *
letexte=(char*)malloc(longeur*sizeof(char)); //alloue la memoire pour le fichier
system("pause");
rewind(fichier); //se positionne au debut
while(i<longeur)
{
letexte[i]=fgetc(fichier);
//compte le nombre de ligne
if (letexte[i]=='\n') nbrlignes++;
i++;
}
fclose(fichier); //ferme le fichier
//affiche le texte
printf("%s\n",letexte);
printf("Nombre de lignes %ld\n",nbrlignes);
system("pause");
//pour les lignes
tableauligne=(char**)malloc(nbrlignes*sizeof(char*));
tableauligne[0]=letexte;
for (i=1;i<nbrlignes-1;i++)
{
while (letexte[j]!='\n')
{j++;}
tableauligne[i]=&letexte[j+1];
j+=1;
}
/* le probleme est ici */
//affiche ligne par ligne
for (i=0;i<nbrlignes-1;i++)
{
//en toute bonne logique c ca m'affiche du pointeur juqu'a la fin du char
//comment corriger ca
printf("\tLigne: %ld ->%s",i,tableauligne[i]);
}
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 17 nov. 2007 à 21:58
1. Tu lis ton fichier octet par octet ce que je déconseille très fortement. Si ton fichier n'est pas volumineux, lis le tout d'un coup puis navigue dans le buffer avec un pointeur.
2. Il suffit d'ajouter toi même le 0 de fin de chaine. Alloue taille_du_fichier+1 octets de mémoire et après la lecture, tu ajoutes buffer[nombre_doctets_lu] = 0