当前位置:网站首页>【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型单个数字的数组)都可用
结语:
各位小伙伴们,觉得有用就给波三连呗!如有错误,请指正,谢谢大家!如果大家有不同意见,请与我交流,一起进步
我们顶峰相见!!!️
边栏推荐
- HCIA (network elementary comprehensive experimental exercise)
- SQL优化的N种方法
- 静态综合实验(静态路由、环回接口、缺省路由、空接口、浮动静态的综合练习)
- TCP's three handshakes and four waves (brief introduction)
- 记录HandsomeBlog的star用户
- Ogeek meetup phase I, together with cubefs, is hot
- 7.13 Weilai approved the written examination in advance
- 数字集成电路:CMOS反相器(一)静态特性
- Codeforces Round #810 (Div. 2), problem: (B) Party
- C language implementation of the small game [sanziqi] Notes detailed logic clear, come and have a look!!
猜你喜欢

C语言——数据类型、基本数据类型的取值范围

HCIA动态路由RIP基础实验
![[explain C language in detail] takes you to play with loop structure (for_while_do while)](/img/d9/75053297873a5b5458514e7f557cdc.png)
[explain C language in detail] takes you to play with loop structure (for_while_do while)

Nat网络地址转换实验

(前缀和/思维)Codeforces Round #806 (Div. 4)F. Yet Another Problem About Pairs Satisfying an Inequality

静态路由综合实验

(title + detailed idea + annotated code) codeforces round 805 (Div. 3) F Equate Multisets

RISC-V工具链编译笔记

Explain exi interrupt through the counting experiment of infrared sensor

7.16 written examination of Duoyi network
随机推荐
First knowledge of C language (2)
Educational Codeforces Round 132 (Rated for Div. 2), problem: (D) Rorororobot
OSPF在MGRE环境下的实验
Lora gateway node converges sensor data
多线程中 synchronized 锁升级的原理是什么?
Golang中的错误处理
Codeforces Round #807 (Div. 2), problem: (C) Mark and His Unfinished Essay
OSPF静态大实验
NAT(网络地址转化协议)
TCP的三次握手与四次挥手(简述)
求解100~200之间的素数
Codeforces Round #809 (Div. 2), problem: (C) Qpwoeirut And The City
数字集成电路:MOS管器件章(一)
(史上最详细)Codeforces Round #805 (Div. 3)E. Split Into Two Sets
lvs+keepalived项目实战
Golang — 解析 yaml 文件
ESP8266Wi-Fi数据通讯
(super detailed version, don't know to comment at any time) codeforces round 804 (Div. 2) C the third problem
C语言——第一个程序、打印、变量和常量
CF 1333C Eugene and an array
