Recuperer des données dans un fichiers. [Résolu]

Signaler
Messages postés
21
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
9 mars 2007
-
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
Salut, je compile ce petit programme et tout fonctionne bien a part que j'ai un probleme de segmentation donc de pointeur.

Y a til une ame généreuse capable de m'expliquer comment récuperer des
données dans un fichiers et les mettres dans un tableau (de pointeur).


#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <stddef.h>


FILE *File;

int c,i;

char**  liste; //tableau 2 dimension??


int main(void){

    File=fopen("data/data.txt","r");

    c=0;

    

    while(!feof(File)) {

        fscanf(File,"%s\n",*liste);

            c++;    

    }

    for(i=0;i<7;i++) {

        printf("%s\n",*liste);        

    }

    

    fclose(File);

    return 0;

}


Merci d'avance

8 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
liste = pointeur non initialisé

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
C'est mieux, mais maintenant c'est liste[c] qui n'est pas initialisé (t'a un tableau de pointeurs non initialisés pour le moment)

    liste= (char **)malloc(15*sizeof(char*));
       
    while(!feof(File) && c < 15 ) {
        liste[c] = ...;
        fscanf(File,"%s",liste[c]);
            c++;   
    }

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
21
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
9 mars 2007

OK mais je t'avoue que je capte rien; j'aimerais crées un programme qui recupere les données de façons dynamique sans  reserver de la mémoire initialement.

Je dois donc utiliser un peu de malloc mais je suis perdue sur la façon de proceder.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stddef.h>

FILE *File;
int c,i;
char** liste;

int main(void){
    File=fopen("data/passe.txt","r");
    c=0;
    liste=(char **)malloc(15*sizeof(char*));
       
    while(!feof(File)) {
        fscanf(File,"%s",liste[c]);
            c++;   
    }
    for(i=0;i<7;i++) {
        printf("%s\n",liste[i]);       
    }
   
    fclose(File);
    free(liste);
    return 0;
}

On dit que c'est un passage obliger pour bien maîtriser le c que de se prendre la tête la dessus. J'imagine bien qu'ici des mecs connaissent la reponses.  Ou pourrait me guider.
Merci d'avance.
Messages postés
21
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
9 mars 2007

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stddef.h>

FILE *File;
int c,i;
char** liste;

int main(void){
    File=fopen("data/present.txt","r");
    c=0;
    liste=(char **)malloc(15*sizeof(char));
    
        
    while(!feof(File)) {
        liste[c]=(char*)malloc(sizeof(char));
        fscanf(File,"%s",liste[c]);
            c++;    
    }
    for(i=0;i<6;i++) {
        printf("%s\n",liste[i]);        
    }
    
    fclose(File);
    free(liste);
    return 0;
}
Sa marche!!!!!!!!
mais je comprends pas pourquois? En effet, liste[c]=(char*)malloc(sizeof(char)); signifie que j'ai allouer quoi?? de la memoire pour fscanf ou est-ce juste une ligne de mon tableau. Le faite que liste[c] est la mémoire d'un octet m'invite a croire que c pas la dedans que fscanf va enregistrer son contenus
ou peut etre il ne fait que lui donner une adresse. Sa s'eclairecie doucement
Messages postés
21
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
9 mars 2007

final....
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stddef.h>

FILE *File;
int c,i;
char** liste;

int main(void){
    File=fopen("data/present.txt","r");
    c=0;
    liste=(char **)malloc(15*sizeof(char));
   
       
    while(!feof(File)) {
        liste[c]=(char*)malloc(sizeof(char*));
        fscanf(File,"%s",liste[c]);
            c++;}
           
    for(i=0;i<c;i++) {
        printf("%s\n",liste[i]);
        free(liste [i]);}
   
    fclose(File);
    free(liste);
    return 0;
}

Merci vecchio56
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
liste[c]=(char*)malloc(sizeof(char*));

Tu ne réserve qu'un octet, logiquement faut réserver plus (la taille maximal d'une ligne)

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Je dirais plutôt 4 octets (sizeof(char*) <- pointeur)

J'avais fais un snippet qui permettait d'allouer rapidement de la mémoire pour un pointeur de pointeurs. Voici l'adresse si ça t'interesse:
http://www.codyx.org/snippet_allocateur-pointeur-pointeurs_293.aspx

C++ (@++)<!--
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Oups la boulette, j'avais pas vu le *

_____________________________________
Un éditeur de ressources gratuit pour Windows