2015-08-18 1 views
1

Comment puis-je convertir un std::ostringstream en LPCSTR?std :: ostringstream vers LPCSTR?

std::ostringstream oss; 
[...] 
LPCSTR result = oss.str(); 

Résultat: Error: No suitable conversion function from "std::basic_string<char, std::char_traits<char>, std::allocator<char>>" to "LPCSTR" exists

Répondre

6

Comme ceci:

std::string str = oss.str(); 
LPCSTR cstr = str.c_str(); 

Notez que vous ne cstr reste valable jusqu'à la prochaine modification de str. Ainsi, vous ne pouvez pas, par exemple, renvoyer cstr à partir d'une fonction car str est une variable locale qui a quitté la portée.

Au lieu de renvoyer LPCSTR à partir de cette fonction, renvoyez std::string. Cela évite de traiter des problèmes de durée de vie si vous avez renvoyé LPCSTR. Si vous avez renvoyé LPCSTR, vous devrez allouer de la mémoire et vous assurer que vous l'avez libérée. Exactement le genre de chose que vous ne voulez pas faire dans le code C++. Par conséquent, renvoyez std::string et appelez c_str() sur cet objet à l'endroit où vous appelez la fonction Windows API.

+0

Le retour était exactement ce que j'avais l'intention de faire, alors comment pourrais-je faire cela? –

+0

Ne fais pas ça. Il vous laissera avec toutes sortes de maux de tête à vie. Renvoyez un 'std :: string' et appelez' c_str() 'sur ce point là où vous devez appeler la fonction winapi. –

+1

Renvoyer une référence à un local ne va pas se terminer correctement. Ne distribuez pas de vaches mortes (ou d'objets en général). – IInspectable