2014-09-22 42 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());