Conversion AnsiString *char [Résolu]

HeavenForsaker 223 Messages postés mercredi 13 juillet 2005Date d'inscription 8 août 2011 Dernière intervention - 16 févr. 2006 à 22:31 - Dernière réponse : HeavenForsaker 223 Messages postés mercredi 13 juillet 2005Date d'inscription 8 août 2011 Dernière intervention
- 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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
tibob51 268 Messages postés vendredi 30 avril 2004Date d'inscription 13 mai 2013 Dernière intervention - 17 févr. 2006 à 00:20
3
Merci
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

Merci tibob51 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de tibob51
tibob51 268 Messages postés vendredi 30 avril 2004Date d'inscription 13 mai 2013 Dernière intervention - 16 févr. 2006 à 23:22
0
Merci
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");
Commenter la réponse de tibob51
HeavenForsaker 223 Messages postés mercredi 13 juillet 2005Date d'inscription 8 août 2011 Dernière intervention - 16 févr. 2006 à 23:38
0
Merci
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.
Commenter la réponse de HeavenForsaker
tibob51 268 Messages postés vendredi 30 avril 2004Date d'inscription 13 mai 2013 Dernière intervention - 16 févr. 2006 à 23:57
0
Merci
si tu fait:
strWndCaption.operator+=(CharBuffer);

ça devrai le faire non?
ou j'ai mal compris ton problème
Commenter la réponse de tibob51
HeavenForsaker 223 Messages postés mercredi 13 juillet 2005Date d'inscription 8 août 2011 Dernière intervention - 17 févr. 2006 à 00:13
0
Merci
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 .
Commenter la réponse de HeavenForsaker
HeavenForsaker 223 Messages postés mercredi 13 juillet 2005Date d'inscription 8 août 2011 Dernière intervention - 17 févr. 2006 à 00:30
0
Merci
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 !
Commenter la réponse de HeavenForsaker

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.