2014-12-02 86 views
1

我有一個印刷wchar_t的產生奇怪的結果

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。這裏有什麼問題?

此外,我使用卡薩布蘭卡Rest SDK時有此代碼。

+0

用'L「替換'restResponse.reason_phrase()。c_str()OK」'這一切都爲我工作,所以我會好奇你的代碼在做什麼。你如何成功地隱式轉換'c_str()'在這裏? restResponse.reason_phrase()。c_str()'的真實返回值是多少? – AndyG 2014-12-02 20:13:50

+0

在調試中,當我將光標指向'statusMsg'變量時,我可以看到'L'OK''。但是,對我來說輸出是不同的。 – 2014-12-02 20:16:29

回答

2

看來問題在於函數restResponse.reason_phrase()返回一個類型爲std::wstring的臨時對象在這種情況下,在這個語句之後,臨時對象將被刪除並且指針statusMsg將無效。

而不是指針,你應該定義一個類型爲std::wstring的對象,該對象將被函數的返回值初始化,並將成員函數c_str應用於此對象。

否則程序有未定義的行爲。