为什么我在调试窗口中看到问号(stringstream问题)?

时间:2014-09-22 09:40:10

标签: c++ visual-c++

我是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());

然而,当我运行程序时,我在Debug窗口中看到这样的行:

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

我最好的猜测是,这与我转换为LPCTSTR有关,但我从这里的旧问题的答案中得到了这个方法。

2 个答案:

答案 0 :(得分:0)

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

当您使用ASCII字符串并将其转换为UNICODE时,您会得到Gibberish。

要解决此问题,您需要使用宽字符串类型而不是字符串,或者将程序字符集更改为多字节 您需要更改以下类型: stringwstringostringstreamwostringstream"abc"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());

答案 1 :(得分: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());