【C++从入门到熟练练习题】第五讲
strlen和sizeof的区别详解
前言
1.上节课回顾
上一次给大家讲了C++常量与作用域,因为代码比较简单并且代码不唯一,就不给大家统一答案啦。
今天主要给大家讲的是sizeof运算符和strlen的区别。
为了让大家能够更加清晰的了解其区别,在这里不讲废话,通过不同的实例来给大家说明。
一、作用介绍
不管是strlen还是sizeof,他们都是用于计算长度的,strlen计算的是字符串的长度,sizeof计算的是字符所占空间大小。
二、区别
1.字符串不设置长度
字符串不设定长度时,定义完字符串以后,字符串结尾会自动添加一个转义字符:\0 来表示字符串的结尾,所以利用sizeof计算字符串长度时,需要在字符串本来的长度上+1。
strlen则不用。
以如下代码为例:
#include<iostream>
using namespace std;
void main()
{
char a[] = "abcd";
cout << sizeof(a) << endl;
cout << strlen(a) << endl;
}
输出结果为:
5
4
请按任意键继续...
字符串设定长度时,sizeof计算的是所占空间大小,不管占的空间是否有元素,都会计算在内,
所以利用sizeof计算字符串长度时,是字符串定义的长度。与字符串所含字符数无关。
strlen求得的是字符串长度,与所占空间无关。所以当含有4个字符(abcd)时,输出的就是4。
以如下代码为例:
" style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace; margin: 0px 0.15em; white-space: pre; overflow: auto; border-radius: 3px; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; display: block !important; padding: 0.5em; color: rgb(51, 51, 51); background: rgb(248, 248, 248) none repeat scroll 0% 0%; -moz-text-size-adjust: none;">
using namespace std;
void main()
{
char a[10] = "abcd";
cout << sizeof(a) << endl;
cout << strlen(a) << endl;
}
输出结果为:
10
4
请按任意键继续...
#include<iostream>
using namespace std;
void main() {
char a[10] = "ab\0cd";
cout << sizeof(a) << endl;
cout << strlen(a) << endl;
}
输出结果为:
10
2
请按任意键继续...
三、注意点
利用这两个求字符串长度时,一定要注意转义字符,转义字符是一个字符。
转义字符虽然只有几个有定义(详见:转义字符)
但是只要你在字符串中使用 “\”,那程序就会默认“\”和后面的一个字符构成转义字符,不会考虑这个转义字符是否有含义。
四、思考题
分析下列字符串用sizeof和strlen求得的字符串长度:
char a[] = "ab\0cd\5\\";
char a[10] = "ab\0cd\5\\";
char a[] = "ab\1cd\5\\";
编辑人:石玉秀
审核人:水亦心