Conversion CString en char* ? - C++ - Programmation
Marsh Posté le 20-05-2004 à 19:04:05
C'est bien avec LPCSTR, mais dans ce cas-ci pourquoi ne pas déclarer ta variable comme const char* plutôt que simple char* ? Je ne vois pas vraiment dans quel cas elle pourrait ne pas être const (enfin, si, mais je pense que ça serait une belle erreur).
Marsh Posté le 20-05-2004 à 19:08:21
Ca dépend ce que tu veux convertir !
Si ton char* est un pointeur constant, alors la conversion n'est pas automatique sinon ta chaine serait corrompue. Tu dois faire un truc du genre :
Code :
|
Si ton char* n'est pas un pointeur constant, alors tu peux utiliser les méthodes GetBuffer() et ReleaseBuffer() de CString :
Code :
|
Marsh Posté le 20-05-2004 à 19:15:35
Mon char* n'est pas un pointeur constant :
La methode GetBuffer veut un paramètre pour etre compiler.
Lorque je lui met une valeur, il compile mais me fais un erreur d'execution
Marsh Posté le 20-05-2004 à 19:20:40
bozocarzu a écrit : Mon char* n'est pas un pointeur constant : |
Oui, c'est la taille minimum en octets du buffer, ça n'était pas présent dans les anciennes versions de MFC.
Faudrait voir à lire la MSDN de temps en temps hein ! Tel que je te lis, j'ai l'impression que tu fous des valeurs quelconques sans avoir la moindre idée de la signification du paramètre !
bozocarzu a écrit : |
C'est quoi le message ?
edit: pourquoi j'ai l'impression que tu indiques une taille de buffer inférieure à la taille de ta chaine ?
Marsh Posté le 20-05-2004 à 19:25:37
J'avoue que je n'est pas lu la MSDN
Le message : L'instruction à @ emploie l'adresse mémoire @. La mémoire ne peut pas être "read".
Marsh Posté le 20-05-2004 à 19:28:34
bozocarzu a écrit : |
Gagné ! Tu dois donner une taille de buffer inférieure à la taille de ta chaine !
Je t'explique : ta chaine fait 3 caractères + le caractère de fin, ce qui donne 4 octets.
Si tu donnes une taille de buffer de 2 octets, ça veut dire que tu vas aller écrire/lire les 2 octets correspondants au dernier caractère de ta chaine et au caractère de fin dans une zone de mémoire qui ne t'appartient pas => boum !
Marsh Posté le 20-05-2004 à 19:36:38
Bas j'ai aussi penser que c'etais ça, donc j'ai mis une taille de 100, et meme resultat.
J'explique un peut plus : J'ai un formulaire et je recupère donc mes variables en CString, mais mon projet m'impose de les converitir en char* et c'est la que je galère
Marsh Posté le 20-05-2004 à 19:48:08
Pourquoi tu peux pas employer des pointeurs constants ? A priori, si ce sont des variables de formulaire, t'as pas à les modifier !
Marsh Posté le 20-05-2004 à 19:52:52
Pour info, j'ai compilé le code suivant :
Code :
|
Ca marche sans problème...
Marsh Posté le 20-05-2004 à 19:57:15
en faite si je dois les modifier, en faite je dois recupérer la variable du formulaire, puis l'agrandir jusqu'a une taille definie
Exemple ; Le mec il me abc dans le champs, et mois je veux que la chaine ai 10 caracteres, je lui ajouter donc 7 espaces !
Code :
|
Tu va me dire que je peut d'abord ajouter mes espaces puis la convertir en char* et je te repondrais qu'un prof c'est borner !
Marsh Posté le 20-05-2004 à 20:05:42
« szConstPtr »
y a tellement de notation hongroise que la variable n'a plus de nom
Marsh Posté le 20-05-2004 à 20:08:12
ReplyMarsh Posté le 20-05-2004 à 20:09:35
Mais pourquoi passer par des char* au fait ?
Marsh Posté le 20-05-2004 à 20:13:14
antp a écrit : Mais pourquoi passer par des char* au fait ? |
Parceque le prof ne veut pas d'objet sauf pour le graphique
Marsh Posté le 20-05-2004 à 20:13:44
ReplyMarsh Posté le 20-05-2004 à 20:26:07
bozocarzu a écrit :
|
t'as pas l'impression de t'être gouré d'opérateur ?
bozocarzu a écrit :
|
pointeur créé localement dans une fonction, puis retourné par cette fonction => boum !
ton code, c'est n'importe quoi !
Marsh Posté le 20-05-2004 à 20:35:43
Pour l'opérateur, lorsque je met < il me sort un warning
Je ne savais que l'on ne pouvais pas renvoyer un pointeur créé localement, surtout que ça n'a pas l air d'etre ce pb, mais je vais repenser ma fonction
Harkonnen a écrit : |
Je suis totalement d'accord
Marsh Posté le 20-05-2004 à 20:43:06
bozocarzu a écrit : Pour l'opérateur, lorsque je met < il me sort un warning |
et donc tu te dis qu'avec "<<", ça marcherait mieux...
bozocarzu a écrit : |
Un pointeur est une variable. Si cette variable est créee à l'intérieur d'une fonction, elle "meurt" à la fin de la fonction. Donc ton pointeur n'existe plus à la fin de ta fonction et pointe sur n'importe quoi !
bozocarzu a écrit : |
y'a plein de problèmes dans ton truc :
Code :
|
Marsh Posté le 20-05-2004 à 20:44:43
Harkonnen a écrit : et donc tu te dis qu'avec "<<", ça marcherait mieux... |
excellent ça
Quelle sera la réaction de Taz
Marsh Posté le 20-05-2004 à 21:30:05
D'ailleurs, pourquoi se faire chier avec des strcat et tout, alors que CString est une classe qui peut grandir dynamiquement ?
Code :
|
et on n'en parle plus !
edit: je viens de lire qu'il n'a pas le droit à l'objet... hallucinant !
dans ce cas, un petit realloc et c'est terminé !
Marsh Posté le 20-05-2004 à 22:19:57
Au final j'ai tous fais en objet, je négocirais avec mon prof
Marsh Posté le 20-05-2004 à 22:41:12
Code :
|
c'est quoi l'erreur la dedans ?
Marsh Posté le 20-05-2004 à 22:57:00
t'as pas l'impression qu'il manque une allocation mémoire et que ton jolie pointeur pointe sur un truc sans doute en lecture seule ?
Marsh Posté le 21-05-2004 à 01:14:38
mouais .. deja apprendre les string avec CString ...
pends ton prof et change d'école.
Marsh Posté le 21-05-2004 à 02:30:35
surtout quand le mec t'apprends les CString pour mieux les convertir en char*
Marsh Posté le 21-05-2004 à 10:22:12
Joel F a écrit : mouais .. deja apprendre les string avec CString ... |
Nan, mais en faite, on dois faire notre projet en C, mais il accepte quand l'objet pour le graphique. Mais je les quand meme fais avec CString, et si il est pas content, sa seras la meme chose
Marsh Posté le 21-05-2004 à 10:23:02
Taz a écrit : surtout quand le mec t'apprends les CString pour mieux les convertir en char* |
On est pas censer utiliser les CString, mais seulement les char*
Marsh Posté le 21-05-2004 à 10:29:18
Le problème des CString, c'est que c'est une technologie propriétaire (MFC), donc ça ne fonctionnera pas sous Linux !
Quitte à faire de l'objet, t'aurais du utiliser la STL !
Marsh Posté le 21-05-2004 à 10:37:01
quitte à faire de l'objet, autant faire du C++, quitte à pas faire d'objet autant faire du C ... encore une classe qui est dans l'incompréhension totale ...
quand on voit que les base de C sont même pas là ...
Marsh Posté le 21-05-2004 à 11:56:09
J'aurais du tous faire en C en théorie, mais je voulais une interface graphique, et je ne voulais pas me prendre la tete avec le graphique
Marsh Posté le 21-05-2004 à 12:48:14
Je ne suis pas sûr que le mélange de C, C++ et MFC soit une bonne solution si tu ne veux pas te prendre la tête
Marsh Posté le 21-05-2004 à 14:41:59
antp a écrit : Je ne suis pas sûr que le mélange de C, C++ et MFC soit une bonne solution si tu ne veux pas te prendre la tête |
Bas tu me propose quoi ?
Marsh Posté le 21-05-2004 à 14:44:58
De ne pas tout mélanger et d'apprendre les bases (les pointeurs, char*, etc.) si tu veux du C
Marsh Posté le 20-05-2004 à 18:48:52
Bonjour,
Je souhaite convertir une chaine CString en char* mais je n'y arrive pas
=> cannot convert from 'const char *' to 'char *'
Merci pour votre aide
Message édité par bozocarzu le 20-05-2004 à 18:49:33