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 :

Probleme tableau de chaine de caractere a plusieurs dimensions


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 98
    Points : 65
    Points
    65
    Par défaut Probleme tableau de chaine de caractere a plusieurs dimensions
    Bonjour,

    Je souhaiterais recupérer des données d'un fichier csv, ds un tableau à plusieurs dimensions.
    Le nombre de ligne et de colonnes ne sera connue que plustard ds le programme.
    Donc :

    est a banir.

    Il me semble que est la meme chose.

    PREMIERE QUESTION : COMMENT DECLARER MON TABLEAU?

    Donc ds un premier temps je lis une premiere fois mon fichier pour y trouver le nb de ligne et de colonne.

    Ensuite je voudrais allouer mon tableau par rapport au 1ere element de mon fichier que je trouverais (appelé DONNEES)

    DEUXIEME QUESTION: COMMENT ALLOUER?

    J'ai deja essayé de faire un bout de programme mais il plante.

    J'ai l'impression qu'en déclarant il me créé un tableau de 100 lignes alors que je voudrais
    un tableau de x ligne et y colonnes avec des chaines de caracteres de 100 lettres maxi.

    Merci de m'aider....

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 57
    Points : 48
    Points
    48
    Par défaut
    Personnellement je verrai bien un char ***map;

    ensuite tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     map = malloc(Nombre de colonne);
    Ensuite une boucle for() qui dans chaque colonne alloue le bon nombre de ligne et une autre boucle for() qui dans chaque ligne alloue la longeur celle-ci.

    A ne pas oublier une bonne fonction pour "free-er" tout ça

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    il faut faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    char *** tab=malloc(1000*sizeof(*tab))
    for(i=0;i<1000;++i)
    {
      tab[i]=malloc(5000*sizeof(*tab[i]));
      for(j=0;j<5000;++j)
      tab[i][j]=malloc(100*sizeof(*tab[i][j])
    }
    je pense qu'un truc comme ça devrait fonctionner. Vérifie si le pointeur n'est pas NULL après le malloc

  4. #4
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 98
    Points : 65
    Points
    65
    Par défaut
    ET comment rentre tu une données dans ton tableau.

    J'ai essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(.........
         for(...........
              {
                  strcpy(tab[nb_ligne][nb_colonne], DONNEES);
               }


    et j'incrementais a chaque fois mon num_ligne et colonne. et ca plantais. Mais peut etre a cause de la mauvaise allocation.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 57
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par orj30754
    ET comment rentre tu une données dans ton tableau.
    [...]
    et j'incrementais a chaque fois mon num_ligne et colonne. et ca plantais. Mais peut etre a cause de la mauvaise allocation.
    Très certainement, utilise des x et des y comme indice tu devrais t'en sortir

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    sinon, je pense que le plus simple est de faire un

    tu l'alloues de la même manière et ensuite tu fais un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tab[i][j]=strdup(donnees);
    après il faudra faire un


  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Si toutes les dimensions sont fixes (sauf la première, qui peut être variable), ceci devrait fonctionner) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef char CENT_CHARS[100];
    typedef CENT_CHARS QUINZE_CENT_CHARS[15];
     
    QUINZE_CENT_CHARS * tab = malloc(15 * sizeof(*tab));
    Et hop, le tout en une seule allocation. Par contre, ça ne marche qu'avec des dimensions fixes.
    Il est également possible de le faire sans typedefs, mais la syntaxe est contre-intuitive.

    PS: Je n'ai pas testé, je n'ai pas le temps...

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 57
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par salseropom
    sinon, je pense que le plus simple est de faire un

    Là tu ne gères que plusieurs lignes dans une seul colonne.

Discussions similaires

  1. Tableau de chaînes de caractères
    Par mouradj2006 dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 13/12/2017, 10h47
  2. probleme avec les chaines de caracteres
    Par snake77350 dans le forum C
    Réponses: 11
    Dernier message: 25/04/2006, 18h29
  3. Probleme avec une chaine de caractere
    Par Jim_Nastiq dans le forum Langage
    Réponses: 2
    Dernier message: 07/04/2006, 09h56
  4. probleme sur les chaines de caractere
    Par foufi5 dans le forum C
    Réponses: 8
    Dernier message: 22/12/2005, 15h30
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

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