C++ c++;从wstring中获取角色i

C++ c++;从wstring中获取角色i,c++,C++,我有个小问题,但我不知道为什么 我有一个std::wstring text值为L“test” 然后我尝试打印它的第一个字符,如下所示: V-- &text[0] addr: 0x80000000 0x80000001 0x80000002 0x80000003 0x80000004 text: t, e, s, t, 0x00 ^-- text[0] OutputDebugString(&text[

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

我有一个
std::wstring text
值为
L“test”

然后我尝试打印它的第一个字符,如下所示:

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

但是结果是
test

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

结果是
est

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

我还尝试了
.at(I)具有相同的结果

明白了:

wchar_t st = text[0];

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

感谢您的帮助

字符串是一系列字符,后跟空终止符


OutputDebugString
函数(以及C和WinAPI中接受字符串的大多数函数)接受指向此类字符串的第一个字符的指针。该函数将保持从该位置和后续位置打印字符,直到输入空终止符


如果只想对单个字符执行操作,则需要调用需要单个字符的函数,或者构建一个长度为1的字符串,其中包含该字符和空终止符。

这是因为,在内存中,该字符串类似于以下内容:

      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”。您正在调用的函数将使用直到终止符为止的所有字符。

OutputDebugStringW(text.c_str());“应该做你想做的事”

OutputDebugString接受一个字符串,因此它将以你给定的地址开始,一直到它到达空值为止。要解决您的特定问题,您必须编写自己的函数,从字符串中提取一个字符,然后将其放入新字符串中,然后输出该新字符串。

您要提取字符的地址并打印该地址。删除
&
以获取字符本身。
OutputDebugString
将以null结尾的字符串作为参数。如果只想打印第一个字符,则需要将其复制到字符串中,并在其后面放置终止符;OutputDebugString(&st)现在感觉无事可做:p^我很惊讶这能起作用。。。在该字符后面需要一个空终止符。类似于:
wchar\u t st[3]={text[0],0x0}
更为正确。当然,这是假设一个
char*
而不是一个
wchar\u t*
(存储在wstring中),但想法是一样的。这与编写
OutputDebugStringW(&text[0])
是一样的,我们已经建立的不是OP想要的。