Pointer sur un tableau de chaînes - C++ - Programmation
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...
Marsh Posté le 19-12-2003 à 15:07:20
pour le PS
A+,
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.
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
Merci pour vos conseils !
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
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