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

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:

  1. size_t 是 C 和 C++ 中用于表示内存大小和对象大小的无符号整数类型,在处理内存和数组相关的操作时非常重要。
  1. sizeof 运算符在编译时求值,而不是运行时。它的结果在编译时就确定了,不会因为变量的具体取值而改变。此外,sizeof 运算符不能用于动态分配的内存或函数类型。
  1. 在 32 位计算机上,指针类型的大小通常为 4 字节(32 位)。这是因为 32 位的寻址范围为 2^32,即 4GB,因此一个指针占据 4 字节的内存空间来存储一个地址。
    而在 64 位计算机上,指针类型的大小通常为 8 字节(64 位)。这是因为 64 位的寻址范围为 2^64,即非常大,需要 8 个字节来存储一个地址。
http://www.lryc.cn/news/150196.html

相关文章:

  • 小文智能GPT助手介绍
  • SpringBoot使用i18n国际化
  • Jmeter的自动化测试实施方案
  • nginx优化相关
  • 美客多(mercadolibre)测评下单技术(养号环境搭建详解)
  • UE5- c++ websocket客户端写法
  • C语言——函数的使用
  • DVWA XSS
  • 石油化工智慧安监方案:TSINGSEE青犀视频AI智能识别安全生产风险预警平台建设
  • R语言图形绘制
  • 2023第七届蓝帽杯 初赛 web LovePHP
  • Pytorch 的基本概念和使用场景介绍
  • git 基础入门
  • openssl 生成自签名证书
  • 微服务dubbo和nexus
  • uView1.0的Upload组件上传图片
  • 【LeetCode题目详解】第九章 动态规划part03 343. 整数拆分 96.不同的二叉搜索树 (day41补)
  • 半导体制造常用软件工具总结
  • 基于Python的IOS自动化测试环境搭建
  • 技术领导力实战笔记25
  • 设计模式-职责链+反射
  • Middleware ❀ Kafka功能与使用详解
  • python3.11教程1:python基础语法、程序控制、函数
  • 【C++】关于using namepace xxx 使用命名空间和冲突
  • Linux常用命令——cupsenable命令
  • 基于Stable Diffusion的AIGC服饰穿搭实践
  • 【 ARMv9 Cluster BUS QoS 配置】
  • 简单了解网络基本概念
  • 网络安全知识库
  • 无涯教程-JavaScript - FLOOR函数