c++ 从 wstring 中获取字符 i

标签 c++

我有一个小问题,但我不知道为什么..

我有一个 std::wstring text,其值为 L"test"

然后我尝试像这样打印它的第一个字符:

OutputDebugString(&text[0]);

但结果是test..

当我使用 OutputDebugString(&text[1]);

结果是est

我认为数组访问应该给我指定位置的字符.. 谁能告诉我我应该做什么或做错了什么?

我也试过 .at(i); 结果相同。

明白了:

wchar_t st = text[0];

OutputDebugString(&st);

Alex Reinking 表示这是一个更好、更安全的解决方案:(因为字符串随后包含一个空终止符)

wchar_t st[3] = { text[0], 0x0 };
OutputDebugString(&st[0]);

感谢帮助

最佳答案

这是因为,在内存中,字符串看起来像这样:

      V-- &text[0]
addr: 0x80000000 0x80000001 0x80000002 0x80000003 0x80000004
text: t,         e,         s,         t,         0x00
      ^-- text[0]

因此,当您请求 text[1] 的地址时,您得到的是:

      V-- &text[1]
addr: 0x80000001 0x80000002 0x80000003 0x80000004
text: e,         s,         t,         0x00
      ^-- text[1]

剩下的就是 e,x,t,NULL 或字符串“ext”。您调用的函数将使用终止符之前的所有字符。

关于c++ 从 wstring 中获取字符 i,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26494524/

相关文章:

c++ - 带有 ACK : Search for all #pragma not ending in once 的 Vim

c++ - 如何迭代打印 SET (STL) 中的元素

c++ - 使用递归生成斐波那契数列的静态 vector 用法

类中的 C++11 线程

c++ - 可视化代码流的工具 (C/C++)

c++ - 调整列宽 QTableWidget

C++问题:boost::bind receive other boost::bind

c++ - g++ 提示 constexpr 函数不是常量表达式

c++ - 交替错误: “Invalid dimension for argument 0”

c++ - 这些垃圾值从何而来?