Accueil > Forum > > > > remplir un tableau avec des chaines de caractères (C)
remplir un tableau avec des chaines de caractères (C)
jeudi 29 décembre 2005 à 13:22:18 |
remplir un tableau avec des chaines de caractères (C)

djibfr
|
Bonjour à tous!
Alors voila, j'ai un petit problème tout bête mais je n'arrive pas à la résoudre et mes recheches ne m'ont pas trop éclairé.
Je souhaite remplir un tableau à 2 dimensions char tableau[][].
Je connais la taille maximale des chaines que je souhaite mettre dans le tableau : longueur_max=10
Mais je ne sais pas à l'avance combien de chaines différentes je vais devoir entrer dans mon tableau. Je récupère cette information au cours de l'exécution: int nb_chaine.
J'ai donc déclaré un tableau: char tableau[nb_chaine][longueur_max].
Jusque là, pas de problèmes!
Le hic c'est que je ne sais pas comment le remplir avec mes différentes chaines.
Ces chaines sont contenues dans une liste chainée que je parcours du début à la fin en pointant sur le champ où se trouve la chaine.
Pouvez vous me renseigner sur la manière de remplir ce tableau?
(ou peut-être connaissez vous des liens qui pourraient m'éclairer?)
Je vous remercie par avance!!
Djib
|
|
jeudi 29 décembre 2005 à 13:34:37 |
Re : remplir un tableau avec des chaines de caractères (C)

vecchio56
|
Tu les remplis avec strcpy (tu copie chaque chaine une par une)
Par contre si char tableau[nb_chaine][longueur_max] marche avec ton compilo, ce sera pas forcément le cas. Normalement les indices pour la déclaration de tableau doivent être des constantes
|
|
jeudi 29 décembre 2005 à 14:27:24 |
Re : remplir un tableau avec des chaines de caractères (C)

DeAtHCrAsH
|
Ton tableau doit au moins avoir la premiere dimension de connue pour faire simple, sinon tu vas te prendre la tete avec les réallocations et le tralala...
Pour ce faire fixe un indice max pour le nombre de chaines que tu puisses avoir et alloue les chaines au fur et a mesure.
Exemple :
#define MAX_STR 64
char *myTab[MAX_STR] ...
for(i=0;i<nb_chaine;i++) { printf("\nVeuillez entrer la chaine numéro %i : ", i); myTab[i] = (char *) malloc(longueur_max); scanf("%s", myTab[i]); }
A toit d'adapter le code en fonction de tes besoins. N'oublie pas de désallouer l'espace mémoire en fin de traitement.
Shell
|
|
jeudi 29 décembre 2005 à 14:37:17 |
Re : remplir un tableau avec des chaines de caractères (C)

vecchio56
|
Il a réussi a faire char tableau[nb_chaine][longueur_max], il n'y a donc pas besoin d'allocation dynamique ici
|
|
jeudi 29 décembre 2005 à 14:47:10 |
Re : remplir un tableau avec des chaines de caractères (C)

ctx_man
|
Je confirme ce que vecchio56 dit : en C on ne peut pas allouer de tableau lorque l'on ne connait pas la taille a la compilation. Pour ce faire tu peut faire ceci :
char **Tableau; char *Tab; long i;
Tableau = (char**)malloc(nb_chaine * sizeof(char*)); i = 0; while(i < nb_chaine) { Tableau[i] = (char*)malloc(longueur_max); strncpy(Tableau[i], /*ta source*/, longueur_max - 1); Tableau[i][longueur_max - 1] = 0; i++; } /*ne pas oublier de liberer la emoire une fois que tu ne t'en sert plus*/ i = 0; while(i < nb_chaine) { if(Tableau[i]) free(Tableau[i]); i++; } free(Tableau);
Tu remarquera que j'ai préférer utiliser strncpy qui permet de copier un nombre preci d'élément. Cela evite que si ta source fait 30 lettres tu en copie 30 aussi. Je force le 0 en fin de chaine pour la rendre utilisable car les strncpy et strcpy ne copient pas le \0. (possibilitée d'utiliser calloc(1, longueur_max) ce qui permet d'allouer une zone memoire comme malloc, mais en la mettant à 0)
Le travail c'est la santé, ne rien faire c'est la préservé !!!
|
|
jeudi 29 décembre 2005 à 14:53:56 |
Re : remplir un tableau avec des chaines de caractères (C)

vecchio56
|
tableau[nb_chaine][longueur_max] ou nb_chaine n'est pas une constante
On remarque que gcc (MinGW) accepte de faire ceci, mais pas VC++
|
|
jeudi 29 décembre 2005 à 14:54:19 |
Re : remplir un tableau avec des chaines de caractères (C)

DeAtHCrAsH
|
vecchio56> Ce n'est qu'une autre solution a son problème, puis autant faire plus propre et moins spécifique
Shell
|
|
jeudi 29 décembre 2005 à 15:11:33 |
Re : remplir un tableau avec des chaines de caractères (C)
|
jeudi 29 décembre 2005 à 15:22:33 |
Re : remplir un tableau avec des chaines de caractères (C)

DeAtHCrAsH
|
Spécifique au compilateur! GCC = VC7 = Déclaration des dimensions obligatoires
Autant coder pour la majorité des compilateurs plutot qu'un. Mais bon chacun sa vision des choses.
Shell
|
|
jeudi 29 décembre 2005 à 15:27:59 |
Re : remplir un tableau avec des chaines de caractères (C)

vecchio56
|
Moi ma vision c'est que de les compilateurs ont un peu chacun leur norme donc je choisis d'abord le compilateur et puis je l'exploie pour avoir le meilleur code
|
|
Cette discussion est classée dans : chaine, tableau, remplir, chaines, caractères
Répondre à ce message
Sujets en rapport avec ce message
Remplir d'un tableau avec des chaines de characteres sour borlandc++ builder [ par sirvincent ]
bonjour, comme marque dans le titre j'aimerais savoir comment on fait pour remplir un tableau avec des chaines de characteres, kel objet faut'il utili
tableau de chaines de char [ par JaguiJaguar ]
Salut, je suis etudiant.je dois réaliser un prog en c qui lit une chaine de char, la stocke dans la premiere ligne d'un tableau char *tab[n]où n est l
Chaines de caractères C++ [ par Scalpweb ]
Bonjour à tous. Je suis un programmeur VB qui essaye d'apprendre le C++. En VB, je connais de nombreuses instrcutions pour gérer les chaines de caract
Diviser une chaine de caractères en 3 chaines de caractères [ par rico77200 ]
A la base je dipose d'un fichier .txt dont le contenu est :apprenti1;ti1;te1apprenti2;ti2;te2apprenti3;ti3;te5apprenti4;ti4;te4apprenti5;ti5;te5Je sou
les chaines de caractères dans C [ par hzocm ]
Bonjour, Je voudrais copier un fragment de la chaine A, comment faire?? ex: A = hello, je suis une chaine je veux copier de la position 3 à 5 --> j'a
chaines de caractères dans un tableau char a 2 dimensions [ par deck_bsd ]
Bonjour a tous, voila J'ai un fichier qui contient des mots (1sur une ligne différente) et je voudrai bien copier chacun de ces mots dans un tableau
D'une AnsiString à un Tableau de char [ par sevenace ]
Bonjour à tous, Mon AnsiString provient d'un EditBox. Je récupère le nombre de caractères comme ça: AnsiString chaine = EditChaine->Text; i
Chaines de caractères [ par Roro8883 ]
Salut,je suis complètement perdu et embrouillé dans les chaînes de caractères en C++ !!!!Comment est-ce que je peux faire pour savoir, dans une chaine
analyse syntaxique [ par fadiam ]
Bonjour à tous. je cherche à réaliser une fonction qui modifie une chaine de caractères.elle n'accepte que les "chiffres" de 0 à 9 et quelques autres
convertir tableau d'entier en chaine de caractere [ par bosmal ]
bonjour, comment feriez vous pour transformer un tableau d'entier (int tab[8192]) en une chaine de caractere. ou autrement y a t il une fonction qui p
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|