"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个字符。