strlen和sizeof的区别

相信大多数初步了解C语言的小伙伴们,应该对strlen和sizeof都不陌生,但是在使用时总会出现或多或少的疑问,我将用这一篇博客解决困扰大家许久的问题(仅此一篇你就会了解的透彻),请耐心阅读!!!

在深究strlen和sizeof的区别时,首先我们需要知道这两个函数所执行的功能分别时是什么?

strlen:

strlen=string length,顾名思义,该函数是用来求解字符串的长度的,所以我们也应该探讨一下字符串的概念;我们都知道在编译器中输入printf(”Hello World!”),就会输出”Hello World!”,这就是一个字符串,类似这种由双引号引起来的一串字符称为字符串面值,或者简称字符串。接着我们就需要了解一下“\0″这个转义字符了,记住任何一个字符串的结尾都会隐藏一个“\0″,他是字符串的结束标志,所以我们在用strlen函数读取字符串的时候,当我们遇到“\0″时我们就要停止读取,此时“\0″前字符的个数就是字符串的长度,注意:这里的“\0″只是结束标志,仅仅告诉我们strlen函数读取到这里就要停止了,“\0″不算做一个字符!!!

示例1:

注:使用strlen时需要引用<string.h>这个头文件!!!

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main()
{
	printf("%d\n", strlen("abcdef"));
	return 0;
}

 我们可以把字符串”abcdef“在内存中的存储结构给大家看一下

 字符串””abcdef“后面隐藏了一个”\0″,所以不读,故字符串长度为6。

示例2:

众所周知,C语言中没有字符串对应的类型,它不像整型用int存储,浮点型用float或者double来存储,所以我们定义一个字符串时一般有常用的两种方式,示例1中的“abcdef”只是字符串的一种,示例2我将会再介绍一种,即用一个字符数组来存储字符串的每一个字符。第二种定义方式对于strlen的求解又有什么情况呢?

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main()
{
	char arr1[] = {'a','b','c','d','e','f'};
	char arr2[] = {'a','b','c','d','e','f','\0'};
	printf("%d\n", strlen(arr1));
	printf("%d\n", strlen(arr2));
	return 0;
}

arr1数组只是单纯把字符串“abcdef”的每一个字符用数组存储起来,而arr2数组则是多存储了一个“\0″,究竟有什么不同呢?我们一起来看运行及如果。

我们可以看到arr1数组的长度为38,arr2数组的长度为6,为什么呢?同样我们需要探讨两个数组在内存中的存储状况。

 arr2数组的存储情况和示例1字符串的存储情况相同,而arr1却不同,所以arr2的长度为6我们就不再赘述,主要研究一下arr1的长度为什么是38。我们都知道字符串的结束标志为”\0″,对于arr1数组来说,没有在数组中额外存储”\0″,所以编译器在读取时,并不会像我们所期望的那样停止读取,故长度当然不会时6,至于为什么是38,是因为在读取时,编译器读取完arr1时会继续往后读取,直到读取到”\0″,arr1在读取完第38个字符后才会遇到”\0″;由于每个人的电脑和编译器不同,读取的长度也不一样,所以arr1这种情况一般我们认为它读取的结果为随机值!!!

示例3:

为了说明”\0″的重要性,我们再举一个例子来说明。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main()
{
	
	printf("%d\n", strlen("abc\0def"));
	
	return 0;
}

这里的字符串“abc\0def”读取的结果是3想必不用赘述了吧!!!

sizeof: 

相比strlen函数,sizeof就简单多了,sizeof其实就是一个运算符,主要用来计算所占空间字节的大小。在初识C语言(一)中我曾讲过用sizeof求解各个数据类型所占内存空间的大小,想要查阅的同学们可自行查阅了解:初识C语言(一)_徐憨憨!的博客-CSDN博客提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言什么是C语言第一个C语言程序数据类型常量,变量字符串+转义字符+注释选择语句循环语句函数数组操作符常见关键字define定义常量和宏指针结构体前言从本章开始,我们将正式进入C语言的学习当中,首先为了对C语言有一个初步的认识,我将会对C语言所有比较重要的内容做一个浅浅的了解。有的同学会疑问我指针,数组等一些还没有开始学这些内容为什么会出现在本章中,.strlen和sizeof的区别https://blog.csdn.net/qq_47908816/article/details/123935676?spm=1001.2014.3001.5501所以我在这里只介绍一下用sizeof来计算一般情况,同样拿”abcdef“来举例吧。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main()
{
	char arr[] = "abcdef";
	printf("%d\n", sizeof("abcdef"));
	
	return 0;
}

 

 此时的结果是7,比strlen的结果多1,那是因为sizeof计算的是所占字节大小,所以字符串后面隐藏的”\0″也要计算进去,我们可以调试监视一下arr这个数组。 

 我们可以清楚的看见arr[6] = ‘\0’,故sizeof(arr)= 7。

想必到这里大家对strlen函数和sizeof运算符的区别都有了深刻的认识,如果对你有帮助,希望大家关注,点赞,后续会为大家继续带来相关知识,谢谢!!!

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2023年12月20日
下一篇 2023年12月20日

相关推荐

此站出售,如需请站内私信或者邮箱!