为什么我的C ++代码显示阿拉伯文字?

时间:2015-11-18 12:54:52

标签: c++ wstring

我有一个使用std::wstringwstringstream的代码:

static std::wstring floatToWString(float val)
{
    std::wstringstream stream;
    stream.precision(8);
    stream.setf(std::ios_base::fixed, std::ios_base::floatfield);
    stream << val;
    return std::wstring(stream.str());
}

当我在代码的'stream'变量中观察时,我看到了类似的东西:

screenshot of debug

据我所知,这些是一些阿拉伯语短语。这怎么可能?

我在Debug和X64配置中使用Visual Studio 2013。 它是关于Wstring或Visual Studio调试模式或其他什么? 我怀疑它只是一块记忆片,但是在我重置电脑之后也是如此。

编辑:对于一些人说它是关于随机内存块或者它是关于不是空终止的字符串,我在另一个唯一的程序中试过它: Just try this

2 个答案:

答案 0 :(得分:5)

如果您发布了文字而不是屏幕截图,这将会非常容易。

936.37829590

那是你的double

剩下的就是发生在内存中的东西。流不是以零终止的,因此调试器无法确定停止显示内存内容的位置。

为什么那句话在那里?我们很难说。这不是您发布的代码所做的事情。

也许程序的其他部分定义了该内容的字符串文字。也许它是您在调用此函数之前阅读过的某些文件的内容。

答案 1 :(得分:2)

我只是在这里猜测,这个猜测就是我在评论中写的:缓冲区不是零终止的。这意味着调试器不会知道字符串实际结束的位置,并继续读取未初始化的内存,直到找到终结符,这可能还有很长的距离。

未初始化的内存中的内容在技术上是不确定,但很可能只是在映射到您的进程的物理内存中存在的任何内容。因此,无论是在您的计划的早期,还是在以前的计划中,都恰好有这个短语。