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想要的。