我有一个小问题,但我不知道为什么。
我有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”。您正在调用的函数将使用所有字符,直到终止符为止。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句