Conversion AnsiString *char

[Résolu]
Signaler
Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011
-
Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011
-
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

Messages postés
268
Date d'inscription
vendredi 30 avril 2004
Statut
Membre
Dernière intervention
13 mai 2013
2
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
Messages postés
268
Date d'inscription
vendredi 30 avril 2004
Statut
Membre
Dernière intervention
13 mai 2013
2
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");
Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011

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.
Messages postés
268
Date d'inscription
vendredi 30 avril 2004
Statut
Membre
Dernière intervention
13 mai 2013
2
si tu fait:
strWndCaption.operator+=(CharBuffer);

ça devrai le faire non?
ou j'ai mal compris ton problème
Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011

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 .
Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011

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 !