Pointer sur un tableau de chaînes

Pointer sur un tableau de chaînes - C++ - Programmation

Marsh Posté le 19-12-2003 à 13:52:18    

Question con, mais là je pige pas :
 
Ca ca fonctionne :
 
char *ARGV[3]={"param0","param1","param2"};
int ARGC = 3;
 
_Func(ARGC, ARGV);
 
Mais ca ca fonctionne pas car ARGV ne peut pas être converti en char ** et si j'essaie de faire un cast j'ai un access violation :??:
 
char ARGV[3][512]={"param0","param1","param2"};
int ARGC = 3;
 
_Func(ARGC, (char **)ARGV);
 
Il me semble pourtant que c'est bien la même chose ?


Message édité par Cyberpat92 le 19-12-2003 à 13:53:18
Reply

Marsh Posté le 19-12-2003 à 13:52:18   

Reply

Marsh Posté le 19-12-2003 à 14:05:14    

c'est quoi le prototype de ta fonction _Func ?

Reply

Marsh Posté le 19-12-2003 à 14:41:38    

Je suppose que le proto est _Func(int, char **);
 
Ben, si les éléments du tableau sont traités comme des (char*), il faut les aborder comme des (char*)!
 
Quand tu déclares argv par:
 char argv[3][512]=etc.;
le cast en (char**) est forcément une régression parce que je vois pas comment un pointeur sur (char*) peut deviner les dimensions de la matrice. (?)
 
PS. - Si Taz se connecte on est morts...


Message édité par ACut le 19-12-2003 à 14:49:54

---------------
NOUVEAU! Le guide de l'édition en version ebook : http://marcautret.free.fr/autret/150q-ebook/
Reply

Marsh Posté le 19-12-2003 à 15:07:20    

[:purljam] pour le PS
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 19-12-2003 à 15:36:55    

ca paraît etre du C, on est dans la cat C++ ici (std::string)
 
char *ARGV[3]={"param0","param1","param2"};
-> chaque élément de ton tableau est un char*, qui pointe sur une chaine écrite en dur (donc const char*)
 
char ARGV[3][512]={"param0","param1","param2"};
-> la, les éléments de ton tableau sont modifiables (ce sont des char [512], qui sont remplis a l'initialisation du tableau).
 
donc, si _Func doit modifier le contenu,  
dans le 1er cas on essaye de modifié une chaine en lecture seule -> access violation,  
dans le 2eme cas les éléments sont modifiables -> ca fonctionne.


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 19-12-2003 à 16:24:01    

Ok, j'avais mal compris la structure en mémoire de la déclaration char *ARGV[3] = {...}
 
J'ai résolu mon pb de la façon suivante :  
 
char *ARGV[3]={"param0","param1","param2"};
int ARGC = 3;
 
char buffer[1024];
 
sprintf(buffer, "param3" );
ARGV[2] = buffer;
 
_Func(ARGC, ARGV);
 
... et là ca fonctionne :D
 
Merci pour vos conseils ! :jap:


Message édité par Cyberpat92 le 19-12-2003 à 16:25:49
Reply

Marsh Posté le 19-12-2003 à 16:25:50    

attention à la portée :)


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 19-12-2003 à 16:27:54    

BlackGoddess a écrit :

attention à la portée :)


 
_Func() est une fonction d'initialisation, je pense que ca va aller, mais sinon je déplacerai la déclaration de buffer. Merci pour la remarque :)
 
EDIT: bon ben je sors la déclaration de buffer de la fonction :whistle:


Message édité par Cyberpat92 le 19-12-2003 à 16:32:02
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed