Lire dans un fichier texte en C

nico -  
 nico -
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);
}
//}
Configuration: Windows XP
Internet Explorer 7.0

10 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  2. nico
     
    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
  3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  4. nico
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  7. le père
     
    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
  8. nico
     
    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
  9. nico
     
    j'ai trouvé j'avais pas alloué *ligne
    0
  10. le père
     
    bravo, mais on te l'avait dit dès ce matin.
    0
  11. nico
     
    ah désolé j'ai du oublier de lire un message
    0