Recuperer des données dans un fichiers.

Résolu
volkukan Messages postés 21 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 9 mars 2007 - 9 mars 2007 à 18:13
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 11 mars 2007 à 00:53
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

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
9 mars 2007 à 19:54
liste = pointeur non initialisé

_____________________________________
Un éditeur de ressources gratuit pour Windows
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
9 mars 2007 à 20:54
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
3
volkukan Messages postés 21 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 9 mars 2007
9 mars 2007 à 20:36
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.
0
volkukan Messages postés 21 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 9 mars 2007
9 mars 2007 à 21:44
#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
0

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

Posez votre question
volkukan Messages postés 21 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 9 mars 2007
9 mars 2007 à 22:19
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
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
10 mars 2007 à 00:39
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
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
11 mars 2007 à 00:23
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++ (@++)<!--
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
11 mars 2007 à 00:53
Oups la boulette, j'avais pas vu le *

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
Rejoignez-nous