【C语言入门级教学】sizeof和strlen的对⽐

1.sizeof和strlen的对⽐

1.1 sizeof

sizeof 计算变量所占内存空间⼤⼩的,单位是字节,如果操作数是类型的话,计算的是使⽤类型创建的变量所占内存空间的⼤⼩。 sizeof 只关注占⽤内存空间的⼤⼩,不在乎内存中存放什么数据。 ⽐如:

#inculde <stdio.h>  
int main() 
{ int a = 10; printf("%d\n", sizeof(a)); printf("%d\n", sizeof a);//表达式可不带括号 printf("%d\n", sizeof(int));  return 0; 
}

易错题

#include <stdio.h>
int main()
{int a=10;printf("%zu\n",sizeof(a+3.14));//结果是8,int+double结果还是double
}

1.2 strlen

strlen 是C语⾔库函数,功能是求字符串⻓度

函数原型如下:

size_t strlen ( const char * str );

统计的是从 strlen 函数的参数 str 中这个地址开始向后,\0 之前字符串中字符的个数。

strlen 函数会⼀直向后找 \0 字符,直到找到为⽌,所以可能存在越界查找。

#include <stdio.h>  
int main() 
{ char arr1[3] = {'a', 'b', 'c'}; char arr2[] = "abc"; printf("%d\n", strlen(arr1));//随机值,因为找不到\0越界了printf("%d\n", strlen(arr2));//3printf("%d\n", sizeof(arr1));//12 sizeof(数组名)表示整个数组,计算的是整个数组的大小printf("%d\n", sizeof(arr2));//16 \0也算一个元素return 0; 
}

1.3 sizeof和strlen的对⽐

sizeofstrlen
1.sizeof是操作符1.strlen是库函数,使⽤需要包含头⽂件 string.h
2.sizeof计算操作数所占内存的⼤⼩,单位是字节2.srtlen是求字符串⻓度的,统计的是 \0 之前字符的个数
3.不关注内存中存放什么数据3.关注内存中是否有 \0 ,如果没有 \0 ,就会持续往后找,可能会越界
4.返回值类型是size_t类型,用%zu打印4.返回值类型是size_t类型,用%zu打印

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/94887.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线程安全及死锁问题

系列文章目录 初步了解多线程-CSDN博客 目录 系列文章目录 前言 一、线程安全 1. 线程安全问题 2. 问题原因分析 3. 问题解决办法 4. synchronized 的优势 1. 自动解锁 2. 是可重入锁 二、死锁 1. 一个线程一把锁 2. 两个线程两把锁 3. N 个线程 M 把锁 4. 死锁…

2025年8月无人驾驶技术现有技术报告

第1章 引言 无人驾驶技术作为21世纪交通运输领域最具革命性的技术创新之一&#xff0c;正在深刻地改变着人类的出行方式和生活模式。进入2025年&#xff0c;随着人工智能、5G通信、高精度传感器等关键技术的快速发展与成熟&#xff0c;无人驾驶技术已从实验室的概念验证阶段逐…

CETOL 6σ 助力康美医疗(CONMED Corporation)显著提升一次性穿刺器产品合格率

概述 康美医疗 (CONMED Corporation)将 Sigmetrix 的 CETOL 6σ 公差分析软件应用于一次性穿刺器的结构优化。该装置是微创外科技术的一次早期突破。在设计阶段&#xff0c;团队发现“测量临界间隙”存在尺寸偏差、超出预期范围&#xff0c;可能在手术中造成患者皮肤损伤&…

LaunchScreen是啥?AppDelegate是啥?SceneDelegate是啥?ContentView又是啥?Main.storyboard是啥?

虽然我很想挑战一下swiftui,但是精力真的是有限&#xff0c;把精力分散开不是一个很好的选择&#xff0c;so swiftui浅尝则止了&#xff0c;目前的精力在html上面。 AppDelegate todo SceneDelegate todo ContentView 最明显的就是这个&#xff0c;当编辑的时候&#xff0c;页面…

垃圾回收机制(GC)

目录 垃圾回收机制 引用计数法 可达性分析算法 垃圾回收算法 标记清除算法 复制算法 标记压缩算法 JVM中一次完整的GC&#xff08;分代收集算法&#xff09; 在新生代中 在老年代中 空间分配担保原则 对象从新生代进入老年代的几种情况‌ Young GC 和 Full GC 垃…

DNS域名系统

DNS域名系统一、什么是DNS?二、DNS的域名层级1. 根域2. 顶级域3. 二级域4. 三级域&#xff08;子域&#xff09;5. 主机名三、DNS服务器的分类四、DNS的解析过程五、DNS的记录类型六、FQDN&#xff08;完全限定域名&#xff09;一、什么是DNS? DNS&#xff08;Domain Name S…

虚拟内存和虚拟页面

虚拟内存虚拟内存是现代操作系统提供的一种内存管理机制&#xff0c;它允许程序访问比实际物理内存更大的地址空间。虚拟内存通过将程序的地址空间划分为多个固定大小的块&#xff08;称为页面&#xff09;&#xff0c;并将这些页面映射到物理内存或磁盘上的页面文件中&#xf…

【2025年电赛E题】基于k230的矩形框识别锁定1

文章目录 概要 整体架构流程 技术名词解释 技术细节 1. 多阈值适配与目标识别逻辑 2. 动态ROI与状态管理机制 3. 数据平滑与偏差计算 4. 硬件适配与UART通信 小结 静态矩形框识别 动态矩形框追踪 概要 本文分析的代码是基于立创庐山派K230CanMV开发板的目标追踪系统实现,主要…

c语言中的数组可以用int a[3]来创建。写一次int就可以了,而java中要声明两次int类型像这样:int[] arr = new int[3];

C 语言数组只需写一次int&#xff0c;而 Java 需两次int相关声明&#xff0c;核心原因是两种语言的数组本质定义、类型系统设计和内存管理逻辑完全不同&#xff0c;具体可拆解为两点核心差异&#xff1a;一、C 语言&#xff1a;数组是 “内存块的类型绑定”&#xff0c;一次声明…

深度学习——详细教学:神经元、神经网络、感知机、激活函数、损失函数、优化算法(梯度下降)

神经网络实战&#xff1a; 深度学习——神经网络简单实践&#xff08;在乳腺癌数据集上的小型二分类示例&#xff09;-CSDN博客https://blog.csdn.net/2302_78022640/article/details/150779819?spm1001.2014.3001.5502 深度学习——神经网络&#xff08;PyTorch 实现 MNIST…

Ubuntu 软件安装的五种方法

1、App Store 安装 Ubuntu 里面有 一个App叫 “Ubuntu软件” 2、Sudo apt-get install 安装法 注意 使用apt工具安装软件&#xff0c;需要sudo&#xff0c;也就是root权限 例子 apt -get install git 会提示查看是否以root用户运行&#xff0c;install-安装sudo a…

Day15 (前端:JavaScript基础阶段)

接续上文&#xff1a;Day14——JavaScript 核心知识全解析&#xff1a;变量、类型与操作符深度探秘-CSDN博客 点关注不迷路哟。你的点赞、收藏&#xff0c;一键三连&#xff0c;是我持续更新的动力哟&#xff01;&#xff01;&#xff01; 主页:一位搞嵌入式的 genius-CSDN博…

在线旅游及旅行管理系统项目SQL注入

1.前言 之前在网上随便逛逛的时候&#xff0c;发现一个有各种各样的PHP项目的管理系统&#xff0c;随便点进一个查看&#xff0c;发现还把mysql版本都写出来了&#xff0c;而且还是PHP语言。 https://itsourcecode.com/free-projects/php-project/online-tours-and-travels-m…

Java网络编程(UDP, TCP, HTTP)

1. OSI 七层网络模型层级名称核心功能协议示例数据单元7应用层提供用户接口和网络服务HTTP, FTP, SMTP, DNS报文6表示层数据格式转换、加密/解密、压缩/解压SSL, JPEG, MPEG数据流5会话层建立、管理和终止会话连接NetBIOS, RPC会话数据4传输层端到端可靠传输、流量控制、差错校…

【P2P】P2P主要技术及RELAY服务1:python实现

P2P 技术 P2P(点对点)网络的核心是去中心化的网络拓扑和通信协议。DP的应用相对较少,但可能出现在: 路由优化:在一些复杂的P2P网络中,一个节点需要向另一个节点发送消息。为了找到一条延迟最低或跳数最少的路径,可能会用到类似最短路径的算法,而这类算法(如Bellman-F…

docker 安装 redis 并设置 volumes 并修改 修改密码(一)

在 Docker 中安装 Redis 并设置volumes持久化数据,同时修改 Redis 密码的完整步骤如下: 安装 Docker 如果还没有安装 Docker,可以参考以下步骤安装: 在 Alibaba Cloud Linux 上安装 Docker # 更新系统 sudo yum update -y# 安装 Docker 依赖 sudo yum install -y yum-util…

如何找出所有连接到本机指定端口的客户端 IP

在日常运维或排查网络问题时&#xff0c;我们常常需要知道&#xff1a;有哪些客户端正在连接我的服务&#xff1f;连接数是否异常&#xff1f;是否存在恶意扫描或 DDoS 行为&#xff1f;本文将教你使用一条简洁高效的 Linux 命令组合&#xff0c;统计连接到本机某个端口&#x…

java IDE安装idea社区版步骤

IntelliJ IDEA 社区版&#xff08;Community Edition&#xff09;是一款功能强大且完全免费的集成开发环境&#xff0c;非常适合 Java 和 Kotlin 初学者或进行基础开发2。我会为你提供详细的安装步骤。 &#x1f6e0; IntelliJ IDEA 社区版安装指南 &#x1f4cb; 系统要求与…

Agent智能体

什么是 Agent&#xff1f; Agent 是一个智能体&#xff0c;可以接收用户请求&#xff0c;利用大模型&#xff08;LLM&#xff09;的推理能力&#xff0c;自动决定&#xff1a; 自己回答还是调用外部工具&#xff08;数据库、API、脚本等&#xff09; 最终把结果返回给用户。 能…

【VSCode】使用VSCode打开md文件以及转化为PDF

【VSCode】使用VSCode打开md文件以及转化为PDF在 Visual Studio Code (VS Code) 中渲染 Markdown 并保存为 PDF&#xff0c;可以通过以下步骤实现。 首先安装好 VSCode&#xff0c;可以参考下述链接 https://blog.csdn.net/weixin_43848614/article/details/148042035 安装m…