【C++从入门到熟练练习题】004 strlen和sizeof的区别详解

目录

前言

上节课回顾

一、作用介绍

二、区别

1.字符串不设置长度

2.提前定义长度

3.字符中含有空字符时

三、注意点

四、思考题


前言

上节课回顾

上一次给大家讲了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;

}

输出结果为:

2.提前定义长度

 

字符串设定长度时,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;

}

输出结果为:

3.字符中含有空字符时

这个时候主要就是空字符串 对两种方法的差别了。

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\\";