当前位置: 首页 > news >正文

sizeof和strlen的小知识

在这里插入图片描述
Hello~,欢迎大家来到我的博客进行学习!

目录

  • 1.sizeof和strlen😺
    • 1.1 sizeof🥰
  • 1.2 strlen😋
    • 1.3 sizeof和strlen的对比👻

1.sizeof和strlen😺

1.1 sizeof🥰

sizeof是一种单目操作符,计算变量所占内存空间的大小,单位是字节。如果操作数是类型的话,计算的是使用类型的创建的变量所占内存空间的大小。
举例:
现在有一个int类型的a,求a所占空间的大小,单位是字节。

#include<stdio.h>
int main()
{int a = 10;printf("%zd\n", sizeof(a));return 0;
}

运行结果:
在这里插入图片描述
其实放变量本身时,a两边的括号可以不用写。

#include<stdio.h>
int main()
{int a = 10;printf("%zd\n", sizeof a);return 0;
}

运行演示:
在这里插入图片描述

还有另一种写法,()内不写a,直接a对应的类型。

#include<stdio.h>
int main()
{int a = 10;printf("%zd\n", sizeof(int));return 0;
}

运行结果:
在这里插入图片描述

1.2 strlen😋

strlen是C语言的库函数,在使用的时候需要添加头文件string.h,功能是求字符串的长度。
现在我们学习如何使用。现在有一个字符串,我们把它传给strlen就行。

#include<stdio.h>
#include<string.h>
int main()
{size_t len = strlen("abcdef");printf("%zd\n", len);return 0;
}

运行演示:
在这里插入图片描述
分析为什么运行结果是6:
strlen求字符串的长度是通过起始位置一直向后数,一直到\0,统计的是\0之前字符的个数。这里是将字符串首字符的a的地址传给了strlen。之前我们说过char*p =“abcdef"中,a的地址赋给了p,该写法和另一种形式是一样的。

#include<stdio.h>
#include<string.h>
int main()
{char arr[] = "abcdef";size_t len = strlen(arr);printf("%zd\n", len);return 0;
}

运行演示:
在这里插入图片描述

注意:不要忘记strlen是针对字符串的。

1.3 sizeof和strlen的对比👻

在这里插入图片描述现在我们进行演示,加深理解:

#include<stdio.h>
#include<string.h>
int main()
{char arr[3] = { 'a','b','c' };size_t len = strlen(arr);printf("%zd\n", len);return 0;
}

运行演示:
在这里插入图片描述
此时在arr数组中,我们只看见了a,b,c三个字符。相当于在一块长长的内存空间中存放了a,b,c三个字符,这三个字符对应的内存空间就是arr数组。因为内存是一块连续的空间,我们并不知道内存中前后的内容。
在这里插入图片描述
为什么不知道呢?因为这里的空间并不属于这里的arr数组。程序只是向内存空间中申请了三个字节的数组空间,此时前后的空间并不属于该数组,我们并不知道前后内存空间里面是什么。按照strlen的运行方法,在该例子中,它在没有遇到\0之前会一直向后找,此时就出现了越界的行为,得到的值就会是意想不到的值。所以我们提供的字符中需要有\0,strlen才可能得到正确的数字,大家一定不要忘记呀!😝
好了,今天的sizeof和strlen的小知识就分享到这里🥳,大家如果感兴趣,请一键三连!😘如果存在问题,各位大佬请在评论区斧正!🥰十分感谢大家的支持!
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【在Linux世界中追寻伟大的One Piece】网络命令|验证UDP
  • vue3-print打印eletable某一行的数据
  • Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用(text2sql)
  • GPT对话知识库——串口通信的数据的组成?起始位是高电平还是低电平?如何用代码在 FreeRTOS 中实现串口通信吗?如何处理串口通信中的数据帧校验吗?
  • 【CSS|第1期】网页设计的演变:从表格布局到Grid布局
  • Lombok:Java开发者的代码简化神器【后端 17】
  • CSS3中的@media查询
  • Go websocket
  • 什么是上拉,下拉?
  • Promise查漏及回调地狱结构优化
  • 嵌入式AI---如何用C++实现YOLO的NMS(非极大值抑制)算法
  • 【Kubernetes】常见面试题汇总(十三)
  • 5.1 溪降技术:个人装备
  • 04_Python数据类型_列表
  • 【运维监控】Prometheus+grafana+kafka_exporter监控kafka运行情况
  • [PHP内核探索]PHP中的哈希表
  • 自己简单写的 事件订阅机制
  • ES2017异步函数现已正式可用
  • ES6 学习笔记(一)let,const和解构赋值
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • JS变量作用域
  • js正则,这点儿就够用了
  • LeetCode29.两数相除 JavaScript
  • mongo索引构建
  • React组件设计模式(一)
  • Redis学习笔记 - pipline(流水线、管道)
  • Redux 中间件分析
  • Vue2.0 实现互斥
  • Vue实战(四)登录/注册页的实现
  • 搞机器学习要哪些技能
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 如何在GitHub上创建个人博客
  • 深度学习在携程攻略社区的应用
  • 用Canvas画一棵二叉树
  • 《码出高效》学习笔记与书中错误记录
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • ​configparser --- 配置文件解析器​
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • ###STL(标准模板库)
  • #android不同版本废弃api,新api。
  • #单片机(TB6600驱动42步进电机)
  • $$$$GB2312-80区位编码表$$$$
  • (7)STL算法之交换赋值
  • (C++哈希表01)
  • (windows2012共享文件夹和防火墙设置
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (三)SvelteKit教程:layout 文件
  • (一)kafka实战——kafka源码编译启动
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转载)Linux 多线程条件变量同步
  • .axf 转化 .bin文件 的方法