Lire dans un fichier texte en C

Fermé
nico - 22 janv. 2008 à 08:24
 nico - 22 janv. 2008 à 16:42
Bonjour,
je souhaite lire un fichier ligne par ligne

le fichier doit comporter quelque chose comme ca(c'est peut-être possible de le changer

float val=1.0
float bp=TRUE
float val1=23.1

j'essaye de lire le fichier mais y'a un problème à l'execution
mais le compilateur ne dit rien

while (fgets(ligne,256, fic) != NULL) //le problème c'est fgets
//{
printf("%s\n",ligne);
if(ligne!=NULL)
{
ptr2=split(ligne," ",0);
str=ptr2[1];
ptr=split(str,"=",0);
tab[0].nom=(char*)malloc(len*sizeof(char));
tab[0].adresse=(char*)malloc(len*sizeof(char));
tab[0].val=atof(ptr[1]);
printf("%f\n",tab[0].val);
tab[0].nom=ptr[0];
printf("%s\n",tab[0].nom);
tab[0].adresse=&(tab[0].val);
printf("0x%x\n",tab[0].adresse);
}
//}
A voir également:

10 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
22 janv. 2008 à 08:36
Salut,

Pourrais -tu poster ton code complet stp ? Et dire exactement, le problème que tu as à l'exécution (Ce que ça affiche à l'écran).

Cordialement
0
voici ma fonction

void lire_fic()
{
FILE *fic;
int nboctet=0;
char* ligne;
char** c;
struct var tab[6];
int len=6;
fic = fopen (source, "r");
char** ptr;
char** ptr2;
char* str;
int i,sizeTab=0;
//si le fichier est trouve
if (fic)
{
//ligne="foo bar=12.0";
while (fgets(ligne,256, fic) != NULL)
{
printf("%s\n",ligne);
if(ligne!=NULL)
{
ptr2=split(ligne," ",0);
str=ptr2[1];
ptr=split(str,"=",0);
tab[0].nom=(char*)malloc(len*sizeof(char));
tab[0].adresse=(char*)malloc(len*sizeof(char));
tab[0].val=atof(ptr[1]);
printf("%f\n",tab[0].val);
tab[0].nom=ptr[0];
printf("%s\n",tab[0].nom);
tab[0].adresse=&(tab[0].val);
printf("0x%x\n",tab[0].adresse);
}
}
}
//free(ligne);
close(fic);
free(fic);
}

le problème est que ca n'affiche rien du tout ou plutot ca affiche mais je vois tien
et si je change le while (fgets(ligne,256, fic) != NULL)
par ligne="float bar=12.0"; tout ce que je veux est affiché

c'est bien pour ca que je demande de l'aide
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
22 janv. 2008 à 08:48
Salut,
Je vois déjà des erreurs.
tab[0].nom=ptr[0] et pareil pour la ligne avec le champ adresse.
Tu dois utiliser la fonction strcpy.
0
j'aç oublié de dire que j'avais un warning pour cette ligne là
tab[0].adresse=&(tab[0].val);

[Warning] assignment from incompatible pointer type
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
22 janv. 2008 à 09:43
Salut,

As-tu effectué comme j'ai dit plus haut des strcpy à la place des tab[0].adresse et tab[0].nom ?
Et sinon, poste ta structure var.

Cordialement
0
Bonjour

De plus, ton pointeur ligne n'est pas initialisé. Où le fgets va-t-il écrire en mémoire ?
Tu peux le remplacer par un tableau char ligne[257] ou le laisser en pointeur et l'initialiser avec un ligne=malloc(257,sizeof(char)) (et remettre le free à la fin)
0
ma structure est:

struct var
{
float val;
char* nom;
unsigned char* adresse;
};


et j'ai changé mon bout de code par ca


tab[0].val=atof(ptr[1]);
strcpy(tab[0].nom,ptr[0]);
strcpy(tab[0].adresse,&(tab[0].val));

c'est ce que tu voulais me dire?
ca fait la même chose dès que j'utilise le while (fgets(ligne,256, fic) != NULL) ca plante
je me dis peut-être que c'est les malloc
0
j'ai trouvé j'avais pas alloué *ligne
0
bravo, mais on te l'avait dit dès ce matin.
0
ah désolé j'ai du oublier de lire un message
0