在C ++中将double转换为字符串会产生奇怪的字符(中文字符?)

时间:2017-05-31 16:15:31

标签: c++ visual-studio type-conversion tostring

我正在尝试将两个double值转换为C ++中的字符串,以便我可以使用TRACE在输出窗口中查看它们。我正在使用Visual Studio 2017.这是我的主要代码:

double distance = 3.0;
double secondsPassed = 10.0;
TRACE(L"Hello!\n");
TRACE(L"distance = %s seconds passed: %s \n",
    std::to_string(distance).c_str(), std::to_string(secondsPassed).c_str());

这是我的TRACE功能的定义:

void TRACE(TCHAR *format, ...)
{
    TCHAR buffer[1000];

    va_list argptr;
    va_start(argptr, format);
    wvsprintf(buffer, format, argptr);
    va_end(argptr);

    OutputDebugString(buffer);
}

这是我输出窗口中显示的内容:

Hello!
distance = ⸳〰〰〰 time: 〱〮〰〰0찀쳌쳌  

我不确定为什么两个double值没有被转换为字符串" 3.0"和" 10.0"。相反,我得到这些奇怪的角色!如果他们不是我在标题中提到的汉字,我道歉 - 我只懂英文

非常感谢任何建议或意见!感谢。

1 个答案:

答案 0 :(得分:4)

问题在于,您的TRACE宏需要宽字符串,但您要传递的是较宽的字符串:请查看函数w中的wvsprintf()

使用std::to_wstring(),它应该有效。

或者,您可以使用%hs来告诉您的参数是窄字符串。或者您可以更改宏并调用vsprintf()