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

Résolu
joduak Messages postés 194 Date d'inscription lundi 11 juillet 2005 Statut Membre Dernière intervention 13 avril 2007 - 26 janv. 2006 à 19:07
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 - 27 janv. 2006 à 00:36
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

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
26 janv. 2006 à 19:27
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]);
3
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
26 janv. 2006 à 19:25
#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
0
joduak Messages postés 194 Date d'inscription lundi 11 juillet 2005 Statut Membre Dernière intervention 13 avril 2007
26 janv. 2006 à 19:37
Ca marcheeeeee ! MERCI t'es trop fort!!
0
joduak Messages postés 194 Date d'inscription lundi 11 juillet 2005 Statut Membre Dernière intervention 13 avril 2007
26 janv. 2006 à 19:59
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
0

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

Posez votre question
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
27 janv. 2006 à 00:36
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]
0