打印wchar_t会产生奇怪的结果

时间:2014-12-02 20:10:24

标签: c++

我有一个

const wchar_t* statusMsg = restResponse.reason_phrase().c_str();

我用两种方法打印它们。

std::wcout << "Status Msg : " << *statusMsg << *(statusMsg + 1) << std::endl;

std::wcout << "Status Msg : " << statusMsg;

实际输出应为OK。第一个语句打印OK,而第二个语句打印O。这有什么不对?

此外,我在使用Casablanca Rest SDK时也有此代码。

1 个答案:

答案 0 :(得分:2)

似乎问题是函数restResponse.reason_phrase()返回类型为std::wstring的临时对象。在这种情况下,在此语句之后,临时对象将被删除,指针statusMsg将无效。

您应该定义一个类型为std::wstring的对象,而不是指针,该对象将由函数的返回值初始化,并将成员函数c_str应用于此对象。

否则程序有不确定的行为。