2014-09-22 47 views
-1

我是Windows編程的新手,我已經與C#有過什麼樣的體驗。爲什麼我在調試窗口(串流問題)中看到問題標記?

我被要求在一個由C++的同事編寫的項目上工作。他避免使用任何.Net功能,因爲他不喜歡它。我想在一些調試輸出增加,這裏是我的代碼:

std::ostringstream strs; 
    strs << "Average value: " << dbl_sum/(double)_buffer.size() << " Buffer Size: " << _buffer.size(); 
    std::string str = strs.str(); 
    OutputDebugString((LPCTSTR)str.c_str()); 

然而,當我跑我看到在調試窗口,這樣行方案:

?????????????????????????????›? 

我最好的猜測是,這是我的轉換到LPCTSTR,但我從這裏回答了一個老問題。

+1

該投影只停止了編譯器告訴你,你做錯了。它並沒有阻止你做錯事。使用OutputDebugStringA()來調用時間機器。 – 2014-09-22 10:10:08

+0

謝謝,使用OutputDebugStringA修復了這個問題 – James 2014-09-22 10:16:06

回答

0

感謝@Hans Passant我設法解決了這個問題。我將我的代碼更改爲:

std::ostringstream strs; 
strs << "Average value: " << dbl_sum/(double)_buffer.size() << " Buffer Size: " << _buffer.size() << std::endl; 
std::string str = strs.str(); 
OutputDebugStringA((LPCSTR)str.c_str()); 
0

我猜你的項目的字符集是UNICODE

當你把ASCII字符串,並將其轉換爲Unicode你有胡言亂語

要解決這一點,你需要使用的,而不是字符串寬字符串類型,或者你的程序的字符集更改爲多字節 您需要更改這些類型: stringwstringostringstreamwostringstream, ​​到L"abc"

std::wostringstream strs; 
strs << L"Average value: " << dbl_sum/(double)_buffer.size() << L" Buffer Size: " << _buffer.size(); 
    std::wstring str = strs.str(); 
    OutputDebugString(str.c_str());