C语言中strlen函数与sizeof函数的区别

今天在牛客上做错了一道题,引发了我的思考,又看到CSDN上没有关于这个的详解,或许是我没有找到,于是便自己着手写了一篇,作者仅仅是一名大二学生,如您发现文章有错误,请私聊或者评论我修改,麻烦您了

题目贴图

C语言中strlen函数与sizeof函数的区别_第1张图片

 

我们都知道sizeof是返回对象或者一个类型所占用的内存大小,而strlen函数返回一个字符串的实际长度。

于是我在vs2019上面测试了一下:

char abc_1[] = "abcdef";
	char abc_2[] = { 'a','b','c','d','e','f' };
	cout << strlen(abc_1) << endl;
	cout << strlen(abc_2) << endl;
	system("pause");
	return 0;

输出:

 这时候我感到很奇怪,为什么第一个跟第二个的输出不太一样,我查阅了资料,发现strlen函数是从字符串的首元素出发,直到遇见\0结束,输出的是这之间的元素个数;

又因为abc_1字符串它的后面会默认跟上一个\0,但是abc_2不会。所以输出第二个的时候,编译器会从abc_2的首元素开始计数,直到遇见一个\0结束计数,而abc_2中f后面并没有添加\0结尾符,所以它就会一直往下面寻找,直到遇见一个\0结束,所以第二个输出会比abc_2的实际长度大一点。

我又在vs上打了一遍

char abc_1[] = "abcdef";
	char abc_2[] = { 'a','b','c','d','e','f' };
	char abc_3[] = { 'a','b','c','d','e','f','\0' };
	cout << strlen(abc_1) << endl;
	cout << strlen(abc_2) << endl;
	cout << strlen(abc_3) << endl;
	system("pause");
	return 0;

输出:

 我们可以看到第三个输出与第一个相同,即当我们以第二种的方式初始化一个字符串时,不要忘记在末尾加上\0结尾符

你可能感兴趣的:(c语言,c++)