当前位置:网站首页>【C语言】strlen与sizeof相关区分
【C语言】strlen与sizeof相关区分
2022-07-26 22:49:00 【helinliupi-何】
博客主页: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型单个数字的数组)都可用
结语:
各位小伙伴们,觉得有用就给波三连呗!如有错误,请指正,谢谢大家!如果大家有不同意见,请与我交流,一起进步
我们顶峰相见!!!️
边栏推荐
- Lora网关节点汇聚传感器数据
- HCIA Basics (1)
- 第三讲--GPIO输入输出库函数使用以及相关例程
- STM32 introductory tutorial lesson 2
- TCP的三次握手与四次断开
- Lora illumination sensor node data acquisition
- Lora gateway node converges sensor data
- 2022 latest live broadcast monitoring 24-hour monitoring (III) analysis of barrage in live broadcast room
- Golang — 解析 yaml 文件
- [MySQL] MySQL startup and shutdown commands and some error reports to solve problems
猜你喜欢

Experiment exercise of two-layer packaging technology (HDLC, ppp--pap\chap, GRE)

Simple application of rip V2 (V2 configuration, announcement, manual summary, ripv2 authentication, silent interface, accelerating convergence)

JUC并发编程

STM32入门教程第二讲

MySQL课程1.简单命令行--简单记录 欢迎补充纠错

lvs+keepalived项目实战

Ogeek meetup phase I, together with cubefs, is hot

Lora communication application development

数字集成电路:MOS管器件章(一)

Experiment of total connection and star topology of mGRE
随机推荐
OSPF的重发布及路由策略
C语言——赋值运算符、复合的赋值运算符、自增自减运算符、逗号运算符、条件运算符、goto语句、注释
Golang中的错误处理
OSPF protocol knowledge summary
HCIA基础知识(1)
Golang - sync包的使用 (WaitGroup, Once, Mutex, RWMutex, Cond, Pool, Map)
Dynamic routing rip protocol experiment
(the most detailed in History) codeforces round 805 (Div. 3) e Split Into Two Sets
Timer interrupt experiment
C语言实现小游戏【三子棋】注释详细 逻辑清晰 快来看看吧!!
7.7 sheen Xiyin written test
第三讲--GPIO输入输出库函数使用以及相关例程
Self introduction and planning about programming
Republishing and routing strategy of OSPF
TCP的三次握手与四次断开
三个整数从大到小排序(详细介绍多种方法)
The basic configuration of static routing (planning of IP address and configuration of static routing) realizes the accessibility of the whole network.
[volatile principle] volatile principle
7.13 Weilai approved the written examination in advance
[explain C language in detail] takes you to play with functions
