🎉博客主页:Luo-Kuang-何
🎉座右铭:一起走向人生巅峰的路上😁
🎉学习进度:【C语言】
🎉博客声明:我将尽我所能,用心写好每一份博客,让更多小伙伴能够与我交流学习心得。
如有不足,请指正。学习就是在不断犯错并改正的过程💪!
前言:
我们经常需要知道一些数组的长度用于计算或查找某值,通常会用strlen函数和sizeof来得到我们想要的结果。
定义区分:
1.首先,我先给出strlen与sizeof定义之间的区别
strlen 是库函数(需要#include<stdlib.h>头文件)
strlen 是求字符串长度的,关注的字符串中是否有\0,统计\0之前出现的字符个数
sizeof 是操作符
sizeof 只关注占据了多大的内存空间,不关注内存中存放的数据
代码展示:
1.先展示一些相关代码
2.运行结果
问题描述:
看的出来,结果可能与我们预期不一样。
1.首先同样是strlen,但2种数组初始化方式不一样,结果也产生了差异。
2.同样是sizeof,2种数组初始化方式产生的结果也不一样,并且arr1时产生了一个我们意料之外的数字15.
2. arr1与arr2的区别
char arr1[] = "abc"; 为: a b c \0
char arr2[] = { 'a', 'b', 'c' }; 为: a b c
3.产生不同的原因
首先:arr1初始化为字符串,而字符串要用 \0结尾,所以arr1在字符串后面会自动补上\0
arr2初始化为指定的3个字符,不需要 \0结尾,也不会补上\0
结果分析:
1.对strlen结果不同分析
根据strlen定义,统计\0之前的字符个数。
所以arr1 结果为3
因为arr2里没有\0,根据内存关系,会去arr2开辟内存后面去找\0,直到找到\0,统计\0之前的字符个数,会是一个随机值,这次为15
2.对sizeof结果不同分析
根据sizeof定义,统计数组中所占的字节数(sizeof返回值的单位是字节)
arr1数组中\0也是一个字符,并且存在所占字节,要被统计。因此arr1为4个字节空间
arr2数组中没有\0,且只有3个字符站3个字节空间
总结
1. 数组初始化(在未定空间大小)为字符串会自动加\0以结尾
为多个字符时,不会加\0结尾
2.strlen要统计\0之前的字符个数(不包含\0,并且必须找到\0)只能用于求字符串长度
sizeof只统计数组所站空间所包含的字节个数(包含\0,因为\0也是一个字符,站一个字节) 字符串长度-1和单个字符(尤其是int型单个数字的数组)都可用