栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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;
输出:

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/655949.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号