【C语言】strlen与sizeof相关区分

追逐巅峰

🎉博客主页: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型单个数字的数组)都可用


结语:

各位小伙伴们,觉得有用就给波三连呗!😘如有错误,请指正,谢谢大家!如果大家有不同意见,请与我交流,一起进步💪

我们顶峰相见!!!👍💻🏔️

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

helinliupi-何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值