Fonction qui retourne un char* - C++ - Programmation
Marsh Posté le 06-06-2003 à 09:23:09
polo021 a écrit : je voudrais bien faire une fonction de conversion d'un CString en char*.
|
Malloc ou new si c'est C++...
Marsh Posté le 06-06-2003 à 09:24:11
skeye a écrit : |
et je le fais ou le free du malloc ou le delete du new?
Marsh Posté le 06-06-2003 à 09:25:00
new si t en C++. le seul pb c que ton truc sera pas effacé de lui meme, faudra te le faire a la main.
Marsh Posté le 06-06-2003 à 09:25:59
polo021 a écrit : |
tu cprends pourquoi les char * c merdique pour les strings ? Parce que les strings on a souvent un peu partout et avec les char * on sait jamais si on peut free() ou pas.....
Pkoi t'as besoin de passer en char * ?
Marsh Posté le 06-06-2003 à 09:26:01
polo021 a écrit : je voudrais bien faire une fonction de conversion d'un CString en char*.
|
Mais non! On ne peut pas retourner l'adresse d'une variable statique, tu es obligé d'allouer un espace mémoire et de renvoyer son adresse (new ou malloc comme ça a déjà été dit).
Marsh Posté le 06-06-2003 à 09:26:08
chrisbk a écrit : new si t en C++. le seul pb c que ton truc sera pas effacé de lui meme, faudra te le faire a la main. |
ca fait pas trop degueux si je mets le free dans le destructeur de la classe alors que j'ai alloue la variable dans une fonction?
Marsh Posté le 06-06-2003 à 09:26:59
chrisbk a écrit : |
socket
ne me parle pas de getbuffer stp
Marsh Posté le 06-06-2003 à 09:27:03
polo021 a écrit : |
là ou t'as plus besoin de ton char * ...
Marsh Posté le 06-06-2003 à 09:27:10
polo021 a écrit : |
ca peut l'etre, si ton pointeur vers ton char * se promene dans la nature de facon incontrolé (je veux dire, si une fonction memebre alloue ce char * et tu sais que ce char * ne sort pas de ta classe, non, sinon oui)
Marsh Posté le 06-06-2003 à 09:27:12
Renvoie une String et te fais pas chier.
Marsh Posté le 06-06-2003 à 09:27:39
ReplyMarsh Posté le 06-06-2003 à 09:27:46
polo021 a écrit : |
Pas trop...free(null) ne fait rien normalement...
Marsh Posté le 06-06-2003 à 09:28:42
chrisbk a écrit : |
mon char sort de la classe
Marsh Posté le 06-06-2003 à 09:29:45
polo021 a écrit : |
bah là il va falloir lui foutre une valeur dans le constructeur, histoire de pouvoir tester sa validité à l'utilisation, non?
Marsh Posté le 06-06-2003 à 09:30:32
skeye a écrit : |
C pas ca le pb
le pb c que si ta classe meurt, elle va faire un delete sur le char *, et si jamais ton ptr se promenait alors il est possible qu'un acces sur le tableau pointé par ce char * soit effectué => crash
Marsh Posté le 06-06-2003 à 09:31:08
skeye a écrit : |
pas forcement je pense
Marsh Posté le 06-06-2003 à 09:32:26
Utilise des smartpointer, je dois avoir une classe template de smartpointer qui traine si tu veux.
Marsh Posté le 06-06-2003 à 09:33:09
chrisbk a écrit : |
Ah oui...
Un accesseur qui prend un paramètre un autre char * et qui recopie l'original dedans, alors? C'est de plus en plus moche là...
Marsh Posté le 06-06-2003 à 09:33:44
chrisbk a écrit : |
logiquement non, ma classe n'est pas censee etre detruite entre temps. Car je n'utilise qu'un seul objet de cette classe et pendant toute la duree du programme.
EDIT : mais le malloc , ca me fait un peu peur quand meme, on ne sait jamais
Marsh Posté le 06-06-2003 à 09:34:43
Mais pkoi tu utilises pas ce boudiou de LockBuffer ???
http://msdn.microsoft.com/library/ [...] buffer.asp
Marsh Posté le 06-06-2003 à 09:34:51
polo021 a écrit : |
Ouai, mais ça reste relativement moche...
Marsh Posté le 06-06-2003 à 09:39:12
chrisbk a écrit : Mais pkoi tu utilises pas ce boudiou de LockBuffer ??? |
ben non ca va pas
Code :
|
dans sends j'affiche la valeur du parametre et je n'ai que la premiere lettre.
Exactement comme avec GetBuffer d'ailleurs
Marsh Posté le 06-06-2003 à 09:41:14
polo021 a écrit :
|
Citation : |
C'est censé marcher un cast de CString en char *?
Marsh Posté le 06-06-2003 à 09:43:51
skeye a écrit : |
non ca faut meme pas y penser. Pourquoi?
Marsh Posté le 06-06-2003 à 09:58:08
polo021 a écrit : |
Ben je trouve le "return value" de la fonction étrange...si tu récupères un pointeur sur une CString, c'est p-e normal que ton cast se vautre, non?
D'un autre coté je dis probablement des conneries, vu que j'ai encore un peu de mal avec les types de visual, mais bon...
Marsh Posté le 08-06-2003 à 21:14:18
skeye a écrit : |
C'est pareil un delete null?
Marsh Posté le 08-06-2003 à 22:44:45
polo021 a écrit : je voudrais bien faire une fonction de conversion d'un CString en char*.
|
tiens je l'avais raté ce post, dommage...
déja, désolé mais ce code marche nickel chez moi, ds une appli MFC a la con (ca affiche bien ce qu'il faut) :
Code :
|
alors si ca pose problème chez toi, bah ca veut dire que ca vient surement d'un pb chez toi. (phrase copyrightée)
a moins d'un bug dans les CString, mais ca se saurait...
si la ligne :
Code :
|
ne compile pas, c'est pasque t'as pas le droit aux variable length array avec ton compilo, et a moins de compiler avec gcc 3 ca marchera pas.
donc passer par un new, mais c'est chiant pasqu'il faut que tu appelles delete qd ta variable ne sert plus.
tu peux aussi essayer 'static char dest[MAX];' avec MAX le nb que tu penses tes strings ne dépasseront jms, mais c encore plus crade.
Marsh Posté le 08-06-2003 à 22:45:55
polo021 a écrit : |
bah si c'est dégueu, et ca l'est encore plus si ta fonction est appelée plein de fois, ca libérera juste la dernière instance créée...
Marsh Posté le 08-06-2003 à 22:50:15
tiens, essaye ce joli code :
Code :
|
si ca marche pas y aura plus grand chose a faire, a part new project.
Marsh Posté le 06-06-2003 à 09:21:51
je voudrais bien faire une fonction de conversion d'un CString en char*.
Je sais que je pourrais utiliser GetBuffer(...); mais dans mon cas ca ne m'arrange pas.
J'ai donc fait cette fonction
mais a la compilation, il n'accepter pas la taille du tableau car elle n'est pas fixe.
Donc je pourrais le faire avec un malloc mais ma valeur de retour serait detruite je pense.
Quelqu'un aurait'il une idee qui me permettrai de faire fonctionner cette fonction?