IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Tableau dynamique et lecture de fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Par défaut Tableau dynamique et lecture de fichier
    Bonsoir,

    j'ai un petit problème sur un code que j'aimerai transformer mais ça ne fonctionne (je n'obtiens aucun résultat). J'aimerai pouvoir ranger des chaines de caractères lues d'un fichier dans un tableau mais malheureusement je ne vois rien en résultat. Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
     int n, lectureok;
        FILE * fichierCMD;
        size_t size = 0;
        char *m;
     
        char *tabCMD = NULL;
        fichierCMD = fopen("/home/workspace/test/src/cmd.txt", "r");
        printf("**************Fichier de commande***********\n");
        if(NULL != fichierCMD) {
               /* lecture du nombre d'éléments*/
               do {
                       lectureok=fscanf(fichierCMD, "%s", m);
                        if (lectureok==1) printf("%s\n", m);
                       ++size;
                   } while (lectureok==1 && fgetc(fichierCMD)!=EOF);
               /* allocation */
               if(size == 0) {
                   printf("fichier vide !\n");
               }
               tabCMD = (char*) malloc(size * sizeof(char));
               if(NULL == tabCMD) {
                   printf("erreur alloc memoire\n");
               } else {
                   char *p = tabCMD;
                   /* remplissage */
                   do {
                           lectureok=fscanf(fichierCMD, "%s", p);
                           ++p;
                       } while (lectureok==1 && fgetc(fichierCMD)!=EOF);
                }
            }
            fclose(fichierCMD);
    Si vous voyez la solution, je suis preneur !

    Merci par avance

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lectureok=fscanf(fichierCMD, "%s", m);
    m doit être l'adresse du début d'un tableau de char, pas un pointeur (à moins que ce pointeur contienne l'adresse du début d'un tableau, ce qui n'est pas le cas vu qu'il n'est pas initialisé)
    On attend donc la définition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char m[....];// avec une taille suffisante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     } while (lectureok==1 && fgetc(fichierCMD)!=EOF);
    le fgetc.... est inutile. En cas de fin de fichier (ou d'erreur) on aura lectureok !=1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
               if(size == 0) {
                   printf("fichier vide !\n");
               }
               tabCMD = (char*) malloc(size * sizeof(char));
    Si size==0 il ne faut PAS faire le malloc (on a alors malloc(0)).
    Accessoirement, le cast du retour de malloc est inutile et par définition sizeof(char)==1

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/03/2008, 16h05
  2. Tableau dynamique + decalage d’un fichier
    Par dot-_-net dans le forum Bibliothèque standard
    Réponses: 5
    Dernier message: 25/01/2008, 17h52
  3. Tableau dynamique et fichier CSV
    Par scarecrow1 dans le forum Delphi
    Réponses: 25
    Dernier message: 23/02/2007, 15h26
  4. Delphi: Lecture d'un fichier avec un tableau dynamique
    Par grégoire2 dans le forum Langage
    Réponses: 8
    Dernier message: 10/02/2006, 18h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo