2012-12-09 4 views
0

J'utilise C++ (environnement Windows). J'ai:Créer une nouvelle chaîne à partir d'une ancienne

LPCWSTR mystring; 

Cela fonctionne:

mystring = TEXT("Hello"); 

Mais comment faire cela? :

mystring = ((((create a new string with text = the content which is in another LPCWSTR 'myoldstring')))) 

Merci beaucoup d'avance!

PS:

mystring = myoldstring; 

fonctionnerait, mais il ne serait pas créer une nouvelle chaîne, il serait le même pointeur. Je veux créer une nouvelle chaîne!

Répondre

2
LPTSTR mystring; 
mystring = new TCHAR[_tcslen(oldstring) + 1]; 
_tcscpy(mystring, oldstring); 

... After you are done ... 

delete [] mystring; 

C'est un programme complet

#include <tchar.h> 
#include <windows.h> 
#include <string.h> 

int main() 
{ 
    LPCTSTR oldstring = _T("Hello"); 

    LPTSTR mystring; 
    mystring = new TCHAR[_tcslen(oldstring) + 1]; 
    _tcscpy(mystring, oldstring); 

    // Stuff 

    delete [] mystring; 


} 

Il compile très bien avec cl /DUNICODE /D_UNICODE a.cpp

je tchar macros. Si vous ne voulez pas l'utiliser, puis

#include <windows.h> 
#include <string.h> 

int main() 
{ 
    LPCWSTR oldstring = L"Hello"; 

    LPWSTR mystring; 
    mystring = new WCHAR[wcslen(oldstring) + 1]; 
    wcscpy(mystring, oldstring); 

    // Stuff 

    delete [] mystring; 


} 

Compile bien avec cl a.cpp

+0

'erreur C2440: '=': impossible de convertir 'LPCWSTR *' en 'LPCWSTR'' Je suis vraiment très malchanceux aujourd'hui! – Basj

+0

@JosBas petite erreur dans mon code - Corrigé - ne donnera pas cette erreur. – user93353

+0

la ligne avec le nouveau LPCWSTR! – Basj

0

Qu'en est-

string myNewString = std::string(myOldString); 

Tout en utilisant le constructeur de copie de la bibliothèque de chaîne.

+0

' 'string':' identificateur introuvable ('Vous ne trouvez pas string') J'utilise C++ (pas! .NET) – Basj

+0

@JosBas '#include ' ... puis assurez-vous que l'espace de noms 'std' est correctement utilisé, que le préfixe (' std :: string' soit omis dans l'un des deux cas ci-dessus) ou que '' en utilisant l'espace de noms std; –

2

Pour utiliser les chaînes standard C++, vous devez inclure l'en-tête <string>. Puisque vous avez affaire à LPCWSTR (en mettant l'accent sur la partie W de cela) vous avez affaire à des caractères larges, donc vous voulez utiliser des chaînes larges (par exemple, std::wstring au lieu de std::string).

#include <string> 
#include <iostream> 
#include <windows.h> 

int main() { 
    LPCWSTR x=L"This is a string"; 

    std::wstring y = x; 
    std::wcout << y; 
} 
+0

Je ne sais pas pourquoi, mais avec cette solution, il y a un crash! – Basj

+0

@JosBas: Cela indiquerait un problème avec la bibliothèque standard que vous utilisez, ou ailleurs dans votre code. Des deux, un problème ailleurs dans votre code me semble beaucoup plus probable. J'ai édité dans un exemple légèrement plus complet qui devrait compiler et afficher la chaîne copiée (il fait pour moi de toute façon). Si cela fonctionne, votre problème est probablement ailleurs dans votre code. –

+0

Si je supprime cette ligne, pas de crash. Si je l'ajoute, il y a un crash. J'ai utilisé d'autres noms de variables qui sont utilisés * nulle part ailleurs *, de sorte que le crash ne peut pas provenir d'ailleurs. – Basj

Questions connexes