我有一个小问题,但我无法弄明白为什么......
我的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]);
感谢您的帮助
答案 0 :(得分:3)
这是因为,在内存中,字符串看起来像这样:
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"。您正在呼叫的功能将使用所有字符直到终结符。
答案 1 :(得分:1)
string 是一系列字符,后跟空终止符。
OutputDebugString
函数(以及C和WinAPI中的大多数函数都接受字符串)接受指向这种字符串的第一个字符的指针。该函数保持从该位置和后续位置打印字符,直到它对空终止符进行组合。
如果你只想对一个字符进行操作,你需要调用一个需要单个字符的函数,或者构建一个长度为1的字符串,其中包含该字符和一个空终止符。
答案 2 :(得分:0)
OutputDebugString接受一个字符串,因此它将以您给出的地址开始并一直向下,直到它达到NULL。要解决您的特定问题,您必须编写自己的函数,从字符串中取一个字符,然后将其放入一个新字符串,然后输出该新字符串。
答案 3 :(得分:-3)
OutputDebugStringW(text.c_str());应该做你想做的事