wostringstream到LPWSTR for MessageBoxW函数

时间:2014-08-22 01:13:33

标签: c++

我似乎遗漏了将wostringstream转换为LPCWSTR的问题。

void counter_error(const wstring& input) {
    wostringstream tempss;
    tempss << L"Cannot find counter " << input;
    LPCWSTR temp = tempss.str().c_str();
    MessageBoxW(0, temp, L"ERROR", 0);
}

“错误”标题显示正常,但下面的文字是乱码。我认为可能是c_str()函数返回一个常规的char数组而不是一个wchar数组,但是intellisense告诉我它返回一个wchar数组。

1 个答案:

答案 0 :(得分:2)

这一行看起来有问题:

LPCWSTR temp = tempss.str().c_str();

tempss.str()创建一个临时字符串,最后会被销毁。

尝试

void counter_error(const wstring& input) {
    wostringstream tempss;
    tempss << L"Cannot find counter " << input;
    wstring temp_str = tempss.str();
    LPCWSTR temp = temp_str.c_str();
    MessageBoxW(0, temp, L"ERROR", 0);
}

或者,如 @JoachimPileborg 建议的那样,请考虑

MessageBoxW(0, (wstring(L"Cannot find counter " + input).c_str(), ...)

它仍会创建一个临时变量,但在从MessageBoxW返回之前不会被销毁。