Conversion AnsiString *char

Résolu
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011 - 16 févr. 2006 à 22:31
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011 - 17 févr. 2006 à 00:30
Je programme sous C++Builder et il y a un problème au niveau de la fonction strcpy qui ne copie rien dans ma chaine AnsiString strWndCaption, le but étant d'afficher tout simplement le caption d'une fenêtre dans le texte d'un panel.
Voici le code :

//Renvoi le handle de la fenêtre.
HWND hForegrndWnd = GetForegroundWindow();
char CharBuffer[256];
char *pCharBuffer;
pCharBuffer = CharBuffer;
AnsiString strWndCaption;
//Renvoi le caption de la fenêtre dans CharBuffer.
GetWindowText(hForegrndWnd, pCharBuffer, 256);
//C'est ici que se trouve le problème la fonction ne copie rien.
strcpy(strWndCaption.c_str(), pCharBuffer);
//On affiche le résultat dans le Panel de la StatusBar.
StatusBar1->Panels->Items[0]->Text = "Caption : " + strWndCaption;

Si vous voyez des optimisations à apporter qui pourrai éviter les conversions par exemple ça m'arrangerai.
Merci d'avance

6 réponses

tibob51 Messages postés 268 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 13 mai 2013 2
17 févr. 2006 à 00:20
Ta syntaxe est mauvaise
-tu n'a pas besoin de c_str()
il ne sert que pour qu'a rajouter le cractère de fin (\0) pour pouvoir enregistrer une AnsiString dans char
-et il faut le mot clef operator

voici la liste que j'ai en tete j'en oublie peut etre:

operator+=
operator+
operator==
...

ecrit bien comme ça :

strWndCaption.operator+=(CharBuffer);

tu verra
3
tibob51 Messages postés 268 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 13 mai 2013 2
16 févr. 2006 à 23:22
Pour l' AnsiString ce n'est pas strcpy qu'il faut utiliser mais operator+ ou operator+=

ex:

AnsiString Mon_texte;

Mon_texte=Mon_texte.operator+("Bonjour");

ou
Mon_texte.operator+=("Bonjour");
0
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011
16 févr. 2006 à 23:38
Merci pour ta réponse tibob51 mais ça n'est pas ce que j'essaie de faire, en gros je veux faire une conversion d'une chaine de caractère char CharBuffer[256] en chaine AnsiString pour pouvoir l'afficher dans un label de StatusBar (qui ne peux recevoir que de l'AnsiString).
strWndCaption.c_str() permet de convertir une chaine AnsiString en *Char, et moi je veux faire l'inverse. C'est pour ça que j'utilise la ligne suivante :
strcpy(strWndCaption.c_str(), pCharBuffer);
Qui permet de copier ma chaine en format tableau de caractère dans ma variable AnsiString strWndCaption, variable qui pourra être affiché dans mon label.
Le souci c'est que la fonction n'a pas l'air de vouloir de mon strWndCaption.c_str().
Je crois qu'il faut allouer de la mémoire avec "new char" un truc dans le genre, enfin j'espère qu'il existe une fonction capable de faire la conversion parce que sinon ça sert pas à grand chose d'utiliser les AnsiString.
0
tibob51 Messages postés 268 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 13 mai 2013 2
16 févr. 2006 à 23:57
si tu fait:
strWndCaption.operator+=(CharBuffer);

ça devrai le faire non?
ou j'ai mal compris ton problème
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011
17 févr. 2006 à 00:13
Non, ça ne fonctionne pas += est un opérateur de concaténation si je fais :
strWndCaption.c_str() += pCharBuffer;

J'obtiens l'erreur suivante :
[C++ Error] Unit1.cpp(211): E2277 Lvalue required

Ce qui me parrait logique parce qu'on essaie d'assembler les adresses des 2 pointeurs.
Mais c'est bien essayé quand même .
0
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011
17 févr. 2006 à 00:30
Merci beaucoup tibob51 ! t'avais raison c'est moi qui déconnais la !
Effectivement on peut tout betement faire l'opération suivante :

//Avec strWndCaption de type AnsiString et CharBuffer de type char[].
strWndCaption = CharBuffer;

Encore merci man !
0
Rejoignez-nous