目录
上一次给大家讲了C++常量与作用域,因为代码比较简单并且代码不唯一,就不给大家统一答案啦。
今天主要给大家讲的是sizeof运算符和strlen的区别。
为了让大家能够更加清晰的了解其区别,在这里不讲废话,通过不同的实例来给大家说明。
注意:红色加粗是重点。
不管是strlen还是sizeof,他们都是用于计算长度的,strlen计算的是字符串的长度,sizeof计算的是字符所占空间大小。
字符串不设定长度时,定义完字符串以后,字符串结尾会自动添加一个转义字符:\0 来表示字符串的结尾,
所以利用sizeof计算字符串长度时,需要在字符串本来的长度上+1。
strlen则不用。
以如下代码为例:
#include<iostream> using namespace std; void main() { char a[] = "abcd"; cout << sizeof(a) << endl; cout << strlen(a) << endl; }
输出结果为:
字符串设定长度时,sizeof计算的是所占空间大小,不管占的空间是否有元素,都会计算在内,
所以利用sizeof计算字符串长度时,是字符串定义的长度。与字符串所含字符数无关。
strlen求得的是字符串长度,与所占空间无关。所以当含有4个字符(abcd)时,输出的就是4。
以如下代码为例:
#include<iostream> using namespace std; void main() { char a[10] = "abcd"; cout << sizeof(a) << endl; cout << strlen(a) << endl; }
输出结果为:
这个时候主要就是空字符串 对两种方法的差别了。
strlen求得的是字符串长度,与所占空间无关,但是strlen计算字符串长度时,计算到空字符时候停止。所以当含有空字符(\0)时,不管空字符后面还有多少,只计算到空字符前一位。
空字符对sizeof无影响。
以如下代码为例:
#include<iostream> using namespace std; void main() { char a[10] = "ab\0cd"; cout << sizeof(a) << endl; cout << strlen(a) << endl; }
输出结果为:
利用这两个求字符串长度时,一定要注意转义字符,转义字符是一个字符。
转义字符虽然只有几个有定义(详见:转义字符)
但是只要你在字符串中使用 “\”,那程序就会默认“\”和后面的一个字符构成转义字符,不会考虑这个转义字符是否有含义。
分析下列字符串用sizeof和strlen求得的字符串长度:
char a[] = "ab\0cd\5\\"; char a[10] = "ab\0cd\5\\"; char a[] = "ab\1cd\5\\";