URGENT: pb passage d'argument tableau de chaine de caracteres!

Résolu
Signaler
Messages postés
194
Date d'inscription
lundi 11 juillet 2005
Statut
Membre
Dernière intervention
13 avril 2007
-
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
-
Salut à vous!

j'ai un problème de passage d'argument d'un tableau de chaine de caractere.

Si quelqu'un à une idée, faire vite svp !



Voici mon code : je souhaiterai récupérer mon tableau de caractere, remplit grace à la fonction stockage, dans ma fonction main.



#include <stdio.h>

#include <string.h>

#include <stdlib.h>



void stockage(char *argument)

{

char message0[]="chaine1";

char message1[]="chaine2";

char message2[]="chaine3";



*argument = malloc(3*sizeof(char*));

strcpy ( argument[0] , message0);

strcpy ( argument[1] , message1);

strcpy ( argument[2] , message2);



printf("%s\n",argument[0]);

printf("%s\n",argument[1]);

printf("%s\n",argument[2]);

}





void main(void)

{

char **argument;



stockage(&argument);



printf("%s\n",argument[0]);

printf("%s\n",argument[1]);

printf("%s\n",argument[2]);

}





Merci d'avance!!

Jo

5 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
oups, il manque une indirection de pointeur

*argument = (char**) malloc(3*sizeof(char*));
(*argument)[0] = (char*)malloc(strlen(message0)+1);
(*argument)[1] = (char*)malloc(strlen(message1)+1);
(*argument)[2] = (char*)malloc(strlen(message2)+1);
strcpy ( (*argument)[0] , message0);
strcpy ( (*argument)[1] , message1);
strcpy ( (*argument)[2] , message2);

printf("%s\n",(*argument)[0]);
printf("%s\n",(*argument)[1]);
printf("%s\n",(*argument)[2]);
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void stockage(char *** argument)
{
char message0[]="chaine1";
char message1[]="chaine2";
char message2[]="chaine3";

*argument = (char**) malloc(3*sizeof(char*));
argument[0] = (char*)malloc(strlen(message0)+1);
argument[1] = (char*)malloc(strlen(message1)+1);
argument[2] = (char*)malloc(strlen(message2)+1);
strcpy ( argument[0] , message0);
strcpy ( argument[1] , message1);
strcpy ( argument[2] , message2);

printf("%s\n",argument[0]);
printf("%s\n",argument[1]);
printf("%s\n",argument[2]);
}

void main(void)
{
char **argument;

stockage(&argument);

printf("%s\n",argument[0]);
printf("%s\n",argument[1]);
printf("%s\n",argument[2]);
}

Pas compilé nin testé mais devrait aller
Messages postés
194
Date d'inscription
lundi 11 juillet 2005
Statut
Membre
Dernière intervention
13 avril 2007

Ca marcheeeeee ! MERCI t'es trop fort!!
Messages postés
194
Date d'inscription
lundi 11 juillet 2005
Statut
Membre
Dernière intervention
13 avril 2007

Par contre j'ai pas tout capté!

je ne comprends pas l'écriture de cette ligne :



*argument = (char**)malloc(3*sizeof(char*));

Que fais le (char **) ? C'est pour dire que le contenu de argument est
un tableau de caractere à allouer avec 3 éléments à l'intérieur qui
sont chacun sur une taille de (char*) ?



Merci d'avance de tes précieuses explications !

Jo
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
15
Ca veut dire que tu as créés un pointeur sur un tableau de chaine de caractères. Le (char **) est un cast.
Ensuite le 3*sizeof(char*) c'est en effet pour dire que tu alloues un pointeur sur un tableau de 3 chaines de caractères.

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]