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

C语言中strlen函数与sizeof函数的区别,第1张

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

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

题目贴图

 

我们都知道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函数是从字符串的首元素出发,直到遇见结束,输出的是这之间的元素个数;

又因为abc_1字符串它的后面会默认跟上一个,但是abc_2不会。所以输出第二个的时候,编译器会从abc_2的首元素开始计数,直到遇见一个结束计数,而abc_2中f后面并没有添加结尾符,所以它就会一直往下面寻找,直到遇见一个结束,所以第二个输出会比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','' };
	cout << strlen(abc_1) << endl;
	cout << strlen(abc_2) << endl;
	cout << strlen(abc_3) << endl;
	system("pause");
	return 0;
输出:

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5658034.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存