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

sizeof 与strlen的区别

sizeof  和  strlen  是C和C++ 中用于处理数据大小和字符串长度的两个不同的操作符/函数,它们的区别如下:

 

概念和用途

 

-  sizeof  是一个操作符,用于计算数据类型或变量在内存中所占的字节数,它是在编译时确定的,与数据的实际内容无关,可用于任何数据类型,包括基本数据类型(如  int 、 char  等)、数组、结构体、指针等。

 

-  strlen  是一个函数,用于计算字符串的长度,即字符串中字符的个数,不包括字符串结束符  \0 ,它是在运行时计算的,并且只适用于以  \0  结尾的字符串。

 

参数类型

 

-  sizeof  的操作数可以是数据类型名,也可以是变量名、表达式等。例如, sizeof(int) 、 sizeof(arr) ( arr  为数组)、 sizeof(ptr) ( ptr  为指针)等都是合法的。

 

-  strlen  的参数必须是指向以  \0  结尾的字符串的指针,通常是  char*  类型。例如, strlen("hello") 、 char str[] = "world"; strlen(str);  都是正确的用法。

 

返回值含义

 

-  sizeof  返回的是数据类型或变量在内存中所占的字节数。例如,在32位系统中, sizeof(int)  通常返回4, sizeof(char)  返回1, sizeof(char*)  返回4(指针大小为4字节)。如果是数组, sizeof  返回整个数组的大小,如  char arr[10]; sizeof(arr)  将返回10。

 

-  strlen  返回的是字符串中字符的个数(不包括  \0 )。例如, strlen("hello")  返回5, char str[] = "world"; strlen(str)  也返回5。

 

下面是一个简单的代码示例来演示它们的区别:

 

cpp

#include <iostream>

#include <cstring>

 

int main() {

    int num = 10;

    char str[] = "Hello";

    char* ptr = str;

 

    std::cout << "sizeof(num): " << sizeof(num) << std::endl; // 输出4,int类型在32位系统中占4字节

    std::cout << "strlen(str): " << strlen(str) << std::endl; // 输出5,字符串"Hello"的长度为5

    std::cout << "sizeof(str): " << sizeof(str) << std::endl; // 输出6,包括字符串结束符'\0'共6字节

    std::cout << "sizeof(ptr): " << sizeof(ptr) << std::endl; // 输出4,指针在32位系统中占4字节

    std::cout << "strlen(ptr): " << strlen(ptr) << std::endl; // 输出5,通过指针访问字符串,计算长度为5

 

    return 0;

}

http://www.xdnf.cn/news/936199.html

相关文章:

  • Puppeteer测试框架 - Node.js
  • 解决transformers.adapters import AdapterConfig 报错的问题
  • Java中的抽象类
  • 【Redis】持久化
  • Redis知识体系
  • 【深度学习】表示学习:深度学习的数据解构与重构艺术
  • Effective Java 第三版 第二三章总结
  • Selenium自动化操作
  • Java中双端队列的多种实现类详解
  • 力扣面试150题--课程表
  • LabVIEW多道心电记录仪
  • 【靶场】XXE-Lab xxe漏洞
  • Java严格模式withResolverStyle解析日期错误及解决方案
  • PLC入门【1】PLC的简单介绍(教学软件:FX-TRN-BEG-C)
  • Spring Boot中Bean注入方式对比与最佳实践
  • AUTOSAR实战教程--开放式通用DoIP刷写工具OpenOTA开发计划
  • 分类场景数据集大全「包含数据标注+训练脚本」 (持续原地更新)
  • MCP Tool模块详解
  • 听写流程自动化实践,轻量级教育辅助
  • 【原创】基于视觉模型+FFmpeg+MoviePy实现短视频自动化二次编辑+多赛道
  • Unity中如何播放视频
  • 数据结构——F/图
  • 一个一键生成知识讲解类教育视频的ai工具
  • 从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(十一)
  • 【MySQL系列】MySQL 导出表数据到文件
  • 内存分配基础:修改SCT文件的简单例子
  • JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
  • 【Ftrace 专栏】Ftrace 基础使用
  • LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
  • AI 大模型统一集成|Spring AI + DeepSeek 实战接入指南