C语言sizeof和strlen的区别?
sizeof和strlen有什么区别?
sizeof本质是运算符(sizoof既是关键字也是运算符,不是函数哈),而strlen就是函数。sizeof后面如果是类型,则必须加括号,如果是变量,可以不加括号。
sizeof运算符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能够容纳实现所建立的最大对象的字节大小。
sizeof可以用类型作为参数,而strlen只能用char * 作为参数,而且必须是以\0结尾的。sizeof还可以以函数作为参数,如int test(),则sizeof(test())的值等于sizeof(int)的值,在32位计算机下,该值为4。
大部分编译程序的sizeof都是在编译的时候计算的,所以可以通过sizeof(x) 来定义数组维数,通常用来计算占用内存大小。而strlen则是在运行阶段计算的,用来计算字符产的实际长度。
如:
char str[20] = “0123456789”,字符数组str是编译期大小已经固定的数组,在32位计算机下,sizeof(str) = 20,而strlen是在运行期计算的大小,strlen(str) = 10。
思考:
不使用sizeof,怎么求int占用的字节数?
#define my_sizeof(value) (char *)(&value + 1) - (char *)(&value)
&value 表示获取变量 value 的地址。(char )(&value + 1) 表示获取变量 value 后面一个元素的地址,通过将其强制转换为 char 类型来确保以字节为单位进行计算。最后,用 (char *)(&value + 1) - (char *)(&value) 来计算两个地址之间的差值,得到变量 value 的大小。
这个宏定义是一种快速获取变量大小的方法,但在某些特殊情况下可能会有限制。(如包含了 padding 的结构体、指向函数的指针等),可能会导致计算结果不准确。
Tips:
- size_t 是 C 和 C++ 中用于表示内存大小和对象大小的无符号整数类型,在处理内存和数组相关的操作时非常重要。
- sizeof 运算符在编译时求值,而不是运行时。它的结果在编译时就确定了,不会因为变量的具体取值而改变。此外,sizeof 运算符不能用于动态分配的内存或函数类型。
- 在 32 位计算机上,指针类型的大小通常为 4 字节(32 位)。这是因为 32 位的寻址范围为 2^32,即 4GB,因此一个指针占据 4 字节的内存空间来存储一个地址。
而在 64 位计算机上,指针类型的大小通常为 8 字节(64 位)。这是因为 64 位的寻址范围为 2^64,即非常大,需要 8 个字节来存储一个地址。
相关文章:
C语言sizeof和strlen的区别?
sizeof和strlen有什么区别? sizeof本质是运算符(sizoof既是关键字也是运算符,不是函数哈),而strlen就是函数。sizeof后面如果是类型,则必须加括号,如果是变量,可以不加括号。 sizeof…...
小文智能GPT助手介绍
如何使用小文交互的GPT助手,让AI更加智能,适用更多场景? 在小文智能最新推出的4.0版本,有一个新功能,叫做GPT助手。GPT助手,顾名思义,即在小文智能的场景中,接入ChatGPT,…...
SpringBoot使用i18n国际化
使用的SpringBoot版本是2.3.5 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.5.RELEASE</version><relativePath/> </parent> 一、简单测试…...
Jmeter的自动化测试实施方案
前言: Jmeter是目前最流行的一种测试工具,基于此工具我们搭建了一整套的自动化方案,包括了脚本添加配置、本地配置和运行、服务器配置等内容,完成了自动化测试闭环,通过这种快捷简便高效的方式,希望可以解…...
nginx优化相关
https://blog.csdn.net/liuxiao723846/article/details/46862381 Nginx反向代理,当后端为Https时的一些细节和原理_nginx反向代理https_赶路人儿的博客-CSDN博客 nginx - 寒星12345678999 - 博客园 (cnblogs.com)...
美客多(mercadolibre)测评下单技术(养号环境搭建详解)
MercadoLibre(美客多)是拉丁美洲的一个网购平台。该公司为其客户提供电子商务交易的购买,出售,支付和收集机制。目前全球第十大电商市场——巴西是MercadoLibre的主要市场,占据近60%的平台营收,接着是阿根廷…...
UE5- c++ websocket客户端写法
# 实现目标 ue5 c 实现socket客户端,读取服务端数据,并进行解析 #实现步骤 {projectName}.Build.cs里增加 "WebSockets","JsonUtilities", "Json"配置信息,最终输出如下: using UnrealBuildTool;…...
C语言——函数的使用
无参无返回值 语法格式如下: // 函数定义 void 函数名() {函数体 }// 函数调用 函数名();函数名是标识符的一种,需要遵循规则函数只需要定义一次,反复调用只定义函数, 不调用函数, 函数永远不会被执行案例需求: 编写一个函数&am…...
DVWA XSS
反射型 low 查看源代码,没有任何过滤 构造 medium 这里是过滤了 high 这里把双写和大小写和JavaScript都过滤了,用事件来绕过<img src0 οnerrοralert(“xss”)> impossible 这里使用htmlspecialchars进行实体转换并且输出的结果还不能使用事件来…...
石油化工智慧安监方案:TSINGSEE青犀视频AI智能识别安全生产风险预警平台建设
一、行业背景 石油化工生产存储企业属于高温、高压、易燃、易爆、有毒的危险行业,其生产装置大型化、密集化、生产工艺复杂、生产过程紧密耦合。随着互联网技术的发展,运用先进的AI、物联网、大数据、云计算等技术手段不断提高石油化工行业的安全监管水…...
R语言图形绘制
(1)条形图 > barplot(c(1,2,4,2,6,4,3,5)) > barplot(c(1,2,4,2,6,4,3,5),horiz TRUE) #besideTRUE 表示将多个组别的图形并排显示,使它们在水平方向上对齐 #而当 besideFALSE(默认值)时,多个组别的…...
2023第七届蓝帽杯 初赛 web LovePHP
LovePHP 直接给了源码。 network查看到,PHP版本是7.4.33 题目要求我们GET一个my_secret.flag参数,根据PHP字符串解析特性,PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事: 删…...
Pytorch 的基本概念和使用场景介绍
文章目录 一、基本概念1. 张量(Tensor)2. 自动微分(Autograd)3. 计算图(Computation Graph)4. 动态计算图(Dynamic Computation Graph)5. 变量(Variable) 二、…...
git 基础入门
Git基础入门 Git是一个分布式 版本管理系统,用于跟踪文件的变化和协同开发。 版本管理:理解成档案馆,记录开发阶段各个版本 分布式&集中式 分布式每个人都有一个档案馆,集中式只有一个档案馆。分布式每人可以管理自己的档案…...
openssl 生成自签名证书
1、openssl生成CA根证书 1.1、生成CA私钥 openssl genrsa -out root_ca.key 2048 注意:私钥必须妥善保管,既不能丢失,也不能泄露。如果发生丢失和泄露,必须马上重新 生成,以使旧的证书失效。 1.2、通过ca私钥生成pem格…...
微服务dubbo和nexus
微服务是一种软件开发架构风格,它将一个应用程序拆分成一组小型、独立的服务,每个服务都可以独立部署、管理和扩展。每个服务都可以通过轻量级的通信机制(通常是 HTTP/REST 或消息队列)相互通信。微服务架构追求高内聚、低耦合&am…...
uView1.0的Upload组件上传图片
<template><u-uploadref"uUpload":file-list"fileList"accept"image/jpeg,image/png" //允许选择图片文件:sizeType"sizeType":max-size"2 * 1024 * 1024" //限制上传的图片文件最大为 2Moversize"over…...
【LeetCode题目详解】第九章 动态规划part03 343. 整数拆分 96.不同的二叉搜索树 (day41补)
本文章代码以c为例! 一、力扣第343题:整数拆分 题目: 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输…...
半导体制造常用软件工具总结
半导体制造常用软件工具总结 CIM:Computer Integrated Manufacturing 设备自动化,总称MES:Manufacturing Execution System 制造执行系统EAP:Equipment Automation Programming 设备自动化,是MES与设备的桥梁APC&…...
基于Python的IOS自动化测试环境搭建
文章目录 一、测试架构介绍1.1 WebDriverAgent原理分析1.2 tidevice原理分析二、环境安装2.1 iOS 设备安装 WebDriverAgent2.2 安装iTunes2.3 安装tidevice2.4 安装facebook-wda自动化三、操作流程四、Weditor的安装和使用一、测试架构介绍 以下为测试架构原理图 手机端的WDA…...
如何快速掌握Ender-3 3D打印机:新手必看的完整配置指南
如何快速掌握Ender-3 3D打印机:新手必看的完整配置指南 【免费下载链接】Ender-3 The Creality3D Ender-3, a fully Open Source 3D printer perfect for new users on a budget. 项目地址: https://gitcode.com/gh_mirrors/en/Ender-3 Ender-3 3D打印机是一…...
机智云物联网边缘管理系统通过国产化硬件适配认证:实战解析边缘计算架构与生态价值
1. 项目概述:从“云端”到“边缘”,一次关键的认证意味着什么?最近,我们团队主导的“机智云物联网边缘管理系统”成功通过了某主流国产化硬件平台的适配认证。这个消息在内部技术群里传开时,很多同事的第一反应是&…...
SMUDebugTool终极指南:深度掌握AMD Ryzen硬件调试与性能优化
SMUDebugTool终极指南:深度掌握AMD Ryzen硬件调试与性能优化 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: http…...
AspectCore-Framework高级特性:参数拦截、异步切面、作用域管理
AspectCore-Framework高级特性:参数拦截、异步切面、作用域管理 【免费下载链接】AspectCore-Framework AspectCore is an AOP-based cross platform framework for .NET Standard. 项目地址: https://gitcode.com/gh_mirrors/as/AspectCore-Framework Aspec…...
5分钟快速激活Cursor Pro:突破AI编程助手的终极破解方案
5分钟快速激活Cursor Pro:突破AI编程助手的终极破解方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your t…...
Betaflight飞控固件终极指南:2026年开源无人机控制解决方案
Betaflight飞控固件终极指南:2026年开源无人机控制解决方案 【免费下载链接】betaflight Open Source Flight Controller Firmware 项目地址: https://gitcode.com/gh_mirrors/be/betaflight Betaflight是一款专注于飞行性能的开源飞控固件,专为多…...
DS4Windows 3步掌握:如何在Windows上完美使用PS4手柄
DS4Windows 3步掌握:如何在Windows上完美使用PS4手柄 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows DS4Windows是一款功能强大的开源工具,让你在Windows电脑上也能…...
如果你还在为CAD、SolidWorks的许可发愁,看看这八家
先讲个真事。上个月我一个老同事打电话来,他们公司做非标自动化,四十几个机械工程师,用的主要是SolidWorks和AutoCAD。他说每年买浮动许可的钱快三百万了,结果研发那边还是天天有人排队等许可。他去看了一眼,下午两点半…...
My-TODOs:免费开源跨平台桌面待办清单应用终极指南
My-TODOs:免费开源跨平台桌面待办清单应用终极指南 【免费下载链接】My-TODOs A cross-platform desktop To-Do list. 跨平台桌面待办小工具 项目地址: https://gitcode.com/gh_mirrors/my/My-TODOs 你是否经常忘记重要任务?是否在多个待办应用间…...
在 Clean Core 约束下扩展 SAP S/4HANA 标准 OData API
我们正在做的事情很具体,S/4HANA 后端已经能够发布产品主数据相关的 Enterprise Event,事件经过 Integration Suite、Event Mesh、Advanced Event Mesh,再进入 Kafka Event Broker,消费系统按照 product type 订阅不同的 material event。链路跑通以后,业务方很快发现一个…...
