c ++从wstring中获取字符i

时间:2014-10-21 19:16:49

标签: 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]);

感谢您的帮助

4 个答案:

答案 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());应该做你想做的事