当我在将std::string转换为LPCSTR时偶然发现一个奇怪的行为时,我正在玩一些琴弦。

我编写了一个小型测试应用程序来演示:

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

using namespace std;

int main ()
{
    string stringTest = (string("some text") + " in addition with this other text").c_str();
    LPCSTR lpstrTest= stringTest.c_str();
    cout << lpcstrTest << '\n';

    cout << (string("some text") + " in addition with this other text").c_str() << '\n';

    LPCSTR otherLPCSTR= (string("some text") + " in addition with this other text").c_str();
    cout << otherLPSTR;
}


这是输出:

some text in addition with this other text
some text in addition with this other text
îþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþ...[more unreadable stuff]...


我只是想知道是什么导致这种奇怪的行为。

谢谢

最佳答案

LPCSTR otherLPCSTR= (string("some text") + " in addition with this other text").c_str();
cout << otherLPSTR;


那个部分

 (string("some text") + " in addition with this other text")


创建一个所谓的“临时”对象,该对象没有名称,并且包含它的语句完成时会被破坏。您从中获得c_str(),它指向该临时对象的一些内部存储。您将该c_str()分配给otherLPCSTR变量。此后,“包含临时字符串的语句”完成,因此临时字符串被破坏,另一个LPCSTR指向“无处”。

关于c++ - 将std::string转换为LPCSTR时出现奇怪的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11370536/

10-10 16:29