我想你想要问的是使用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个字符。
这中方式的确存在问题,编译器是把\x21后面的C也当做是十六进制转义字符的一位进行计算了,所以会出现too
big
character的报错,如果\x21后面的字符不是十六进制当中的任何一位都没有问题,你可以试一试!或者放在最后都没有问题!