2015-04-16 1 views
0

Je veux concaténer entier avec la chaîne comme ceci:StringCchCat pour les entiers concaténer avec des chaînes en VC++

Mon extrait de code est comme ça.

TCHAR dest[MAX_PATH]; 
int i = 2; 
StringCchCopy(dest,MAX_PATH,"Begining_"); 
StringCchCat(dest,MAX_PATH,LPCTSTR(i)); 

La dernière ligne provoque une exception. Je sais que la dernière ligne est fausse. "Début" & la chaîne concaténée doit être "Début_2". Comment puis-je y parvenir en C++?

+0

Qu'est-ce 'STRSAFE_LPCTSTR'? –

+0

En utilisant ['std :: ostringstream'] (http://en.cppreference.com/w/cpp/io/basic_ostringstream). Ou ['std :: string'] (http://en.cppreference.com/w/cpp/string/basic_string) et [' std :: to_string'] (http://en.cppreference.com/w/ cpp/string/basic_string/to_string). –

+0

Syntaxe de StringCchCat Need LPCTSTR – codeLover

Répondre

1

La solution rapide pour votre code:

TCHAR dest[MAX_PATH]; 
int i = 2; 
_stprintf_s(dest, MAX_PATH, _T("Begining_%d"), i); 

Comme vous pouvez le voir, je l'ai simplifié et rendu plus sûr. Il n'est donc pas nécessaire d'utiliser les fonctions StringCchCopy/StringCchCat.

S'il vous plaît noter que la façon dont vous le faire est pur C, en C++ sur la plateforme Windows, il doit se faire comme ceci:

en utilisant le framework MFC (UNICODE conforme):

int i = 2; 
CString sDest; 
sDest.Format(_T("Begining_%d"), i); 

Le CString a (LPCTSTR) opérateur de distribution. Vous pouvez donc l'utiliser directement dans n'importe quelle fonction qui accepte le type de paramètre LPCTSTR.

manière standard C++ (UNICODE conforme):

int i = 2; 
std::wstring dest(L"Begining_"); 
dest += std::to_wstring(i); 
LPCWSTR str = dest.c_str(); 
1

Essayez ce code

int i = 2; 
std::wstring ext = std::to_wstring(i); // convert integer to wstring 
StringCchCat(dest, MAX_PATH, ext.c_str()); // pass wstring here