相信大多数初步了解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语言所有比较重要的内容做一个浅浅的了解。有的同学会疑问我指针,数组等一些还没有开始学这些内容为什么会出现在本章中,.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运算符的区别都有了深刻的认识,如果对你有帮助,希望大家关注,点赞,后续会为大家继续带来相关知识,谢谢!!!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/89475.html