当前位置:首页 > 科技  > 软件

深入解析 C++ 中的 strlen() 与 sizeof()

来源: 责编: 时间:2024-06-17 17:37:24 239观看
导读在 C++ 编程中,sizeof 和 strlen 是两个非常常用的工具,虽然它们的名字都和大小相关,但它们的用途、行为和计算方式有着显著的区别。一、定义的区别sizeof:sizeof 是一个编译时操作符,用于计算一个数据类型或变量所占的内

在 C++ 编程中,sizeof 和 strlen 是两个非常常用的工具,虽然它们的名字都和大小相关,但它们的用途、行为和计算方式有着显著的区别。Qah28资讯网——每日最新资讯28at.com

Qah28资讯网——每日最新资讯28at.com

一、定义的区别

  • sizeof:sizeof 是一个编译时操作符,用于计算一个数据类型或变量所占的内存大小(以字节为单位)。它由编译器在编译时确定。
  • strlen:strlen 是一个库函数,用于计算以 '/0' 结尾的 C 风格字符串的长度(字符数),不包括末尾的空字符。它在运行时计算。

sizeof 是编译时操作符,而 strlen 是运行时函数。sizeof 计算的是数据类型或变量的内存大小,而 strlen 计算的是字符串的字符数。Qah28资讯网——每日最新资讯28at.com

二、用途上的区别

  • sizeof:主要用于获取数据类型或变量所占的内存大小,这在内存管理、数据结构对齐、缓存分配等方面非常有用。
  • strlen:主要用于获取字符串的长度,在字符串操作和处理时非常常用。

sizeof 用于内存管理和数据结构对齐等用途,而 strlen 用于字符串操作。正确选择它们对于避免编程错误和提高代码效率非常重要。Qah28资讯网——每日最新资讯28at.com

三、类型上的区别

  • sizeof:适用于所有数据类型,包括基本类型、数组、结构体、类等。
  • strlen:仅适用于以 '/0' 结尾的 C 风格字符串(char 数组或 char 指针)。

sizeof 适用于所有数据类型,而 strlen 仅适用于 C 风格字符串。了解这些差异有助于选择正确的工具处理不同的数据类型。Qah28资讯网——每日最新资讯28at.com

四、计算时的行为

  • sizeof:在编译时执行,计算结果在编译时确定,不依赖于运行时数据。
  • strlen:在运行时执行,需要遍历字符串以计算其长度。

sizeof 在编译时执行,结果在编译时确定;strlen 在运行时执行,需要遍历字符串以确定其长度。这意味着 sizeof 的性能不会受到数据大小的影响,而 strlen 的性能会受到字符串长度的影响。Qah28资讯网——每日最新资讯28at.com

五、参数类型

  • sizeof:可以接受数据类型(如 int、double)或变量(如 int a)。
  • strlen:只能接受指向字符数组(C 风格字符串)的指针。

sizeof 可以接受任何数据类型或变量,而 strlen 只能接受 char 指针。确保传递给 strlen 的参数是以 '/0' 结尾的 C 风格字符串,否则会导致未定义行为。Qah28资讯网——每日最新资讯28at.com

六、返回值的含义

  • sizeof:返回类型或变量所占的内存字节数。
  • strlen:返回字符串的字符数,不包括末尾的空字符。

sizeof 返回的是内存字节数,而 strlen 返回的是字符数。理解返回值的不同可以避免误用这些函数。Qah28资讯网——每日最新资讯28at.com

七、精度

  • sizeof:精确返回数据类型或变量的内存大小。
  • strlen:返回字符串的长度,但不包括末尾的 '/0' 字符。

sizeof 精确返回数据类型或变量的内存大小,而 strlen 返回字符串长度但不包括末尾的 '/0'。这种差异在处理数组时尤为重要。Qah28资讯网——每日最新资讯28at.com

八、结果的可预测性

  • sizeof:结果是确定且可预测的,在编译时已知。
  • strlen:结果依赖于运行时数据,需遍历字符串,结果在运行时确定。

sizeof 的结果在编译时确定,是可预测的;strlen 的结果在运行时确定,依赖于输入字符串的内容。确保正确使用这些工具可以避免程序运行时的错误。Qah28资讯网——每日最新资讯28at.com

九、对数组的处理

sizeof:对于数组,返回整个数组所占的内存大小。Qah28资讯网——每日最新资讯28at.com

int arr[10];std::cout << sizeof(arr); // 返回 10 * sizeof(int)

strlen:对于数组,只适用于以 '/0' 结尾的字符数组,返回字符数,不包括末尾的 '/0' 字符。Qah28资讯网——每日最新资讯28at.com

char str[] = "Hello";std::cout << strlen(str); // 返回 5

十、性能

sizeof:在编译时执行,不影响运行时性能。Qah28资讯网——每日最新资讯28at.com

strlen:在运行时执行,需遍历字符串,性能与字符串长度成正比。Qah28资讯网——每日最新资讯28at.com

十一、返回值的区别

sizeof:返回值是 size_t 类型,表示字节数。Qah28资讯网——每日最新资讯28at.com

strlen:返回值也是 size_t 类型,表示字符数。Qah28资讯网——每日最新资讯28at.com

实例对比

通过一个实例来进一步对比 sizeof 和 strlen 的区别:Qah28资讯网——每日最新资讯28at.com

#include <iostream>#include <cstring>int main() {    char str[] = "Hello, World!";    std::cout << "Size of str: " << sizeof(str) << std::endl;    std::cout << "Length of str: " << strlen(str) << std::endl;    return 0;}

Qah28资讯网——每日最新资讯28at.com

在这个例子中,sizeof(str) 返回 14,因为包括末尾的空字符 '/0',而 strlen(str) 返回 13,因为它只计算字符串中的字符数,不包括末尾的空字符。Qah28资讯网——每日最新资讯28at.com

代码示例

#include <iostream>#include <cstring>int main() {    int intArray[10];    double doubleArray[10];    char charArray[10] = "abc";    // sizeof 用法    std::cout << "Size of intArray: " << sizeof(intArray) << std::endl;    std::cout << "Size of doubleArray: " << sizeof(doubleArray) << std::endl;    std::cout << "Size of charArray: " << sizeof(charArray) << std::endl;    // strlen 用法    std::cout << "Length of charArray: " << strlen(charArray) << std::endl;    return 0;}

在这个例子中,sizeof 计算的是数组所占的总内存大小,而 strlen 计算的是字符串的实际长度(不包括末尾的 '/0')。Qah28资讯网——每日最新资讯28at.com

总结

sizeof 和 strlen 是 C++ 中两个重要的工具,理解它们的区别对于编写正确、高效的代码至关重要。简要总结如下:Qah28资讯网——每日最新资讯28at.com

  • 定义:sizeof 是编译时操作符,strlen 是运行时函数。
  • 用途:sizeof 用于计算内存大小,strlen 用于计算字符串长度。
  • 类型:sizeof 适用于所有数据类型,strlen 仅适用于 C 风格字符串。
  • 计算行为:sizeof 在编译时计算,strlen 在运行时计算。
  • 参数类型:sizeof 接受任何类型,strlen 接受 char 指针。
  • 返回值含义:sizeof 返回字节数,strlen 返回字符数。
  • 精度:sizeof 精确返回内存大小,strlen 返回字符串长度。
  • 结果可预测性:sizeof 在编译时确定,strlen 在运行时确定。
  • 数组处理:sizeof 返回数组的总字节数,strlen 返回字符串的字符数。
  • 性能:sizeof 在编译时执行,不影响性能,strlen 在运行时

本文链接:http://www.28at.com/showinfo-26-94285-0.html深入解析 C++ 中的 strlen() 与 sizeof()

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 零基础学C语言:深入理解变量,轻松掌握声明和初始化的技巧

下一篇: Refit | 适用于 .NET Core、Xamarin 和 .NET 的自动类型安全 REST 库

标签:
  • 热门焦点
  • 一加Ace2 Pro真机揭晓 钛空灰配色质感拉满

    终于,在经过了几波预热之后,一加Ace2 Pro的外观真机图在网上出现了。还是博主数码闲聊站曝光的,这次的外观设计还是延续了一加11的方案,只是细节上有了调整,例如新加入了钛空灰
  • 5月iOS设备性能榜:M1 M2依旧是榜单前五

    和上个月一样,没有新品发布的iOS设备性能榜的上榜设备并没有什么更替,仅仅只有跑分变化而产生的排名变动,刚刚开始的苹果WWDC2023,推出的产品也依旧是新款Mac Pro、新款Mac Stu
  • JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • 只需五步,使用start.spring.io快速入门Spring编程

    步骤1打开https://start.spring.io/,按照屏幕截图中的内容创建项目,添加 Spring Web 依赖项,并单击“生成”按钮下载 .zip 文件,为下一步做准备。请在进入步骤2之前进行解压。图
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 小红书1周涨粉49W+,我总结了小白可以用的N条涨粉笔记

    作者:黄河懂运营一条性教育视频,被54万人&ldquo;珍藏&rdquo;是什么体验?最近,情感博主@公主是用鲜花做的,火了!仅仅凭借一条视频,光小红书就有超过128万人,为她疯狂点赞!更疯狂的是,这
  • 自律,给不了Keep自由!

    来源 | 互联网品牌官作者 | 李大为编排 | 又耳 审核 | 谷晓辉自律能不能给用户自由暂时不好说,但大概率不能给Keep自由。近日,全球最大的在线健身平台Keep正式登陆港交所,努力
  • 华为将推出盘古数字人大模型 可帮助用户12小时完成数字人生成

    在今日举行的2023年华为云数字文娱AI创新峰会上,华为云全球Marketing与销售服务总裁石冀琳表示,华为云将在后续推出盘古数字人大模型,可帮助用户12小
  • AI艺术欣赏体验会在上海梅赛德斯奔驰中心音乐俱乐部上演

    光影交错的镜像世界,虚实幻化的视觉奇观,虚拟偶像与真人共同主持,这些场景都出现在2019世界人工智能大会的舞台上。8月29日至31日,“AI艺术欣赏体验会”在上海
Top