strlen和sizeof的区别

导读:本篇文章讲解 strlen和sizeof的区别,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

相信大多数初步了解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;
}

strlen和sizeof的区别

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

strlen和sizeof的区别

 字符串””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″,究竟有什么不同呢?我们一起来看运行及如果。

strlen和sizeof的区别

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

strlen和sizeof的区别

 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;
}

strlen和sizeof的区别

这里的字符串“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;
}

 strlen和sizeof的区别

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

strlen和sizeof的区别

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


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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/89475.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!