当字符发生变化时,为什么这个std :: string的大小会发生变化?

时间:2016-11-08 07:30:53

标签: c++ string escaping

我遇到一个问题,其中字符串的大小受'\0'字符的影响。我在SO搜索过,但仍无法得到答案。

以下是摘录。

int main()
{
  std::string a = "123123\0shai\0";
  std::cout << a.length();
}

http://ideone.com/W6Bhfl

这种情况下的输出是

6

具有不同字符串的相同程序在哪里具有数字而不是字符

int main()
{
  std::string a = "123123\0123\0";
  std::cout << a.length();
}

http://ideone.com/mtfS50

输出

8

引擎盖下究竟发生了什么? '\0'字符的存在如何改变行为?

2 个答案:

答案 0 :(得分:48)

在字符串(或字符)文字中使用时,序列\012八进制转义序列。它是与ASCII换行(12)字符对应的八进制数'\n'

这意味着你的第二个字符串实际上等于"123123\n3\0"(加上实际的字符串文字终结符)。

如果您尝试打印字符串的内容,那将非常清楚。

八进制序列长度为一到三位,编译器将使用尽可能多的数字。

答案 1 :(得分:12)

如果您在ideone检查着色,您会看到\012颜色不同。那是因为这是用八进制写的单个字符。