pb de poinreur lors d'appel de fonctions - C++ - Programmation
Marsh Posté le 18-11-2002 à 10:53:25
Les paramètres, en C, sont toujours passés par valeur, jamais par référence. La seule manière de modifier leur valeur est de passer un pointeur sur la valeur à modifier.
Dans ton cas, si tu veux modifier un char* , il faut passer un char** en paramètre.
Note : Si tu es en C++, tu peux utiliser les références au lieu des pointeurs : char*& .
Marsh Posté le 18-11-2002 à 10:56:44
blackgoddess a écrit a écrit : bonjour, je dois passer un pointeur (char* MyChar) à une fonction pour qu'elle alloue la chaine de caractère. a l'origine, MyChar = NULL ensuite, ds la fonction, MyChar = new char[Size], puis ca la remplit. Mais lorsrque la fonction retourne, MyChar == NULL toujours. Comment faire alors ? |
lorsqu'il ne s'agit que d'une chaine tu as la sol suivante.
char *toto(char *chp)
{
...
modif de chp
...
return(chp);
}
chp = toto(chp);
Solution plutot utilisable en C, en C++ la remarque de bifacemcleod me semble plus judicieuse.
Marsh Posté le 18-11-2002 à 12:41:36
vs pouvez m'en dire un peux plus sur char*& ?
(je suis en cpp, mais ma fonction retourne déjà une valeur)
Marsh Posté le 18-11-2002 à 13:39:59
Pour simplifier, une référence est un pointeur implicitement déréférencé, c'est-à-dire sur lequel l'opérateur "*" (dit de "déréférencement" ) est déjà appliqué.
Ecrire :
Code :
|
revient à écrire :
Code :
|
Marsh Posté le 18-11-2002 à 14:54:31
d'accord ... c encore un peu flou ... mais ca va venir mais dans les 2 cas on doit passer un char** à la fonction toto c bien ca ?
Marsh Posté le 18-11-2002 à 14:55:21
je peux par exemple faire
char* MyChar = NULL;
toto(&MyChar);
est-ce exact ?
Marsh Posté le 18-11-2002 à 14:55:45
(le int est un peu passé à la trappe, mais bon c pas l'interressant)
Marsh Posté le 18-11-2002 à 15:03:22
BlackGoddess a écrit a écrit : je peux par exemple faire char* MyChar = NULL; toto(&MyChar); est-ce exact ? |
si toto prend un char** , OUI
Marsh Posté le 18-11-2002 à 16:34:06
Mais si toto attend un char*&, non. Il faut alors écrire "toto(MyChar);".
Marsh Posté le 18-11-2002 à 10:27:07
bonjour,
je dois passer un pointeur (char* MyChar) à une fonction pour qu'elle alloue la chaine de caractère. a l'origine, MyChar = NULL
ensuite, ds la fonction, MyChar = new char[Size], puis ca la remplit. Mais lorsrque la fonction retourne, MyChar == NULL toujours. Comment faire alors ?
---------------
-( BlackGoddess )-