相关文章推荐
爱看书的鼠标垫  ·  QT ...·  1 年前    · 
礼貌的太阳  ·  Oracle ...·  1 年前    · 
"This\'sabook.\n"请问这个字符串的长度,其中还有字符串的结束符号\0吗?... "This\'s a book.\n"请问这个字符串的长度,其中还有字符串的结束符号\0吗? 我想你想要问的是使用C-Style的 字符串
并使用 sizeof() ()函数计算字符串长度时,计算出来的长度是多少?
答案是16 ,并且有结束符\0,该结束符也占内存空间。
请参考下述“一、C风格的字符串”一节。

一、C风格的字符串:
C风格字符串是一串连续的内存,末尾以'\0'。
1、标准c++规定,一个char型字符的长度为1。
2、c++ 编译器 会为每一个C风格的字符串常量的末尾自动增加‘\0’结束符。
自动增加的'\0'也占内存空间的。

因此,"This\'s a book.\n",会被编译器修改为"This\'s a book.\n\0”,
一共有16个字符,长度为16。

你可以在c++的 main函数 中用如下语句测试:

printf("%d",sizeof("This\'s a book.\n"));

char arr[] = "This\'s a book.\n";
printf("%d",sizeof(arr));

将会发现输出的长度为16。

二:string类
微软 的VC++中实现的string类,不同于C风格的字符串。
它只会管理各个字符,不会自动增加一个结尾字符。
因此如果你用string::size()或者string::length()计算其长度的话,会与C风格字符串长度不同。

string str = "This\'s a book.\n";
printf("%d", str.size());

将会输出15。 因为str对象管理着15个字符。