pb de poinreur lors d'appel de fonctions

pb de poinreur lors d'appel de fonctions - C++ - Programmation

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 )-
Reply

Marsh Posté le 18-11-2002 à 10:27:07   

Reply

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*& .

Reply

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.


Message édité par barbarella le 18-11-2002 à 11:00:12
Reply

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)


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

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 :
  1. void toto(char*& chp, int size)
  2. {
  3.   chp = new char[size];
  4. }


revient à écrire :

Code :
  1. void toto(char** chp, int size)
  2. {
  3.   *chp = new char[size];
  4. }

Reply

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 ?


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

Marsh Posté le 18-11-2002 à 14:55:21    

je peux par exemple faire
 
char* MyChar = NULL;
 
toto(&MyChar);
 
est-ce exact ?


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

Marsh Posté le 18-11-2002 à 14:55:45    

(le int est un peu passé à la trappe, mais bon c pas l'interressant)


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

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

Reply

Marsh Posté le 18-11-2002 à 16:34:06    

Mais si toto attend un char*&, non. Il faut alors écrire "toto(MyChar);".

Reply

Sujets relatifs:

Leave a Replay

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