首页 > 其他分享 >深入解析sizeof和strlen的区别与联系

深入解析sizeof和strlen的区别与联系

时间:2024-07-25 18:55:40浏览次数:15  
标签:空字符 str 字符串 sizeof 解析 strlen size

目录

一、深度解析

1.sizeof

2.strlen 

二、对比

三、举例说明

总结 


大家好,今天我们来探讨一下C语言中两个常用的函数sizeof和strlen。虽然它们都与字符串有关,但它们的用途和实现原理却大相径庭。下面我将从以下几个方面进行对比分析:

一、深度解析

1.sizeof

定义:

sizeof是一个操作符,用于获取数据类型或变量在内存中所占的字节数。它是一个编译时运算符,其结果在编译时就已经确定。

 参数类型:

sizeof可以接受两种参数:数据类型和变量。例如:

sizeof(int);    // 返回int类型所占的字节数
sizeof(a);      // 返回变量a所占的字节数

sizeof 计算变量所占内存内存空间⼤⼩,单位是字节,如果操作数是类型的话,计算的是使⽤类型创建的变量所占内存空间的⼤⼩。sizeof 只关注占⽤内存空间的⼤⼩,不在乎内存中存放什么数据。如果数组是字符串时,sizeof 计算数组大小时包括了结尾的空字符(‘\0’)。

返回值:

sizeof 返回的是数据类型或变量所占用的字节数,类型为 size_t(无符号整数类型)。

2.strlen 

定义:

strlen是一个函数,(所需的头文件为<string.h>)用于计算字符串的实际长度,不包括结尾的空字符(‘\0’)。它是在运行时进行计算,返回值为字符串的实际长度。

函数原型:

size_t strlen ( const char * str );

 参数类型:

strlen的参数必须是一个以空字符(‘\0’)结尾的字符串。例如:

strlen("hello world");  // 返回11,不包括结尾的空字符
strlen统计的是从该函数的参数 str 中这个地址开始向后,\0 之前字符串中字符的个数。 strlen 函数会⼀直向后找 \0 字符,直到找到为⽌,所以可能存在越界查找。 返回值: strlen 返回的是字符串中不包括结尾空字符(‘\0’)的字符数,类型也是 size_t(无符号整数类型)。

二、对比

sizof与strlen对比
sizeofstrlen
sizeof是操作符strlen是库函数
sizeof计算操作数所占内存的⼤⼩, 单位是字节 strlen是求字符串⻓度的,统计的是 \0 之前字符的隔个数
不关注内存中存放什么数据 关注内存中是否有 \0 , 如果没有 \0 ,就会持续往后找,可能会越界

三、举例说明

#include <stdio.h>
#include <string.h>
int main() {
    char str[] = "Hello, World!";
    // sizeof 返回的是整个数组的大小,包括结尾的空字符和可能的额外空间
    size_t size_of_str = sizeof(str);
    // strlen 返回的是字符串中字符的数量,不包括结尾的空字符
    size_t length_of_str = strlen(str);
    printf("sizeof(str) = %zu\n", size_of_str);  // 通常会输出 13
    printf("strlen(str) = %zu\n", length_of_str);  // 输出 12
    return 0;
}

在这个例子中,sizeof(str) 的返回值是 13,因为 “Hello, World!” 加上一个空字符 \0 一共是 13 个字符(每个字符占用 1 个字节),而 strlen(str) 的返回值是 12,因为它只计算了 “Hello, World!” 中非空字符的数量。

总结 

sizeof和strlen虽然都与字符串有关,但它们的用途和实现原理有很大差异。sizeof用于获取数据类型或变量在内存中所占的字节数,而strlen用于计算字符串的实际长度。在实际编程过程中,应根据具体需求选择合适的函数。希望大家通过本文的介绍,能更好地理解和使用这两个函数。

标签:空字符,str,字符串,sizeof,解析,strlen,size
From: https://blog.csdn.net/2302_81410974/article/details/140642781

相关文章

  • 高通进dump和抓取解析dump log
    1.触发dump的办法:高通进dump的方式使用指令:echoc>/proc/sysrq-trigger长按power键有些基线默认是重启,需要进行配置才能使用该方法通过PS-HOLD硬件的方式进入dloader模式抓取dump硬件飞线PS-HOLD将PS-HOLD短接地,手机进入dloader模式,抓取ramdump短接时......
  • 2个月搞定计算机二级C语言——真题(2)解析
    1.前言大家好,我是梁国庆。本篇博客讲解真题2,其中的填空题用到了指向结构体的指针访问被指结构体的成员的知识,我在下文做了讲解。其他的主要还是对数组的考察,没什么难度,搞清楚思路写程序就可以。2.程序填空题2.1题目要求2.2提供的代码#include<stdio.h>#include<st......
  • 一文搞懂系列——PEM文件解析流程
    背景前几周,协助同事解决了SM2软签名的需求,其流程可参考终于解决了!!!基于GmSSL的SM2签名算法及思路分享。但是在解决这个问题的过程中,让我想起了一些不好的回忆:曾经在大众项目中,也接触过椭圆曲线算法签名。其中因为平台下发的公钥格式,由于双方理解不一致,导致最终调试很久,并......
  • 程序设计:C++入门教程(速成) + 15道经典例题(附带例题解析)
    本文章以实用为主,若实在是不明白文字所表达的内容,无脑复制代码,自己动手运行一下,实验一下即可理解文章内容,放心,代码是全的,全选复制粘贴即可不废话,直接开整数据类型常用数据类型int:整数类型,用于表示整数值。例如:1,2,-3,0等。float:单精度浮点数类型,用于表示带有小数点的数......
  • 钢铁百科:舞钢产20号钢材质解析,20#钢板调质状态交货,20号钢力学性能
    20#钢板材质是一种优质的低碳碳素钢,具有良好的韧性、塑性和焊接性。以下是对其执行标准、化学成分、力学性能、交货状态、应用范围及常用规格的详细介绍。执行标准:对于厚度在3~60mm的20#钢板,执行标准为GB/T711-2008,其交货状态通常为热轧,也可根据需求进行正火、退火或高温......
  • 钢铁百科:15#钢材质解析,15号钢四切,NB二探保材质保性能
    一、15#钢执行标准:   -GB/T711-2017:这是目前关于15#钢板的主要执行标准,该标准确保了钢板的质量、生产流程和性能均达到国家规定的要求。二、15#钢化学成分:*碳(C):0.12~0.18%*硅(Si):0.17~0.37%*锰(Mn):0.35~0.65%*硫(S)和磷(P)的含量均不超过0.035%此外,还可能含有少量的铬(Cr)、......
  • C语言【面试】常用知识点总结之常用易错易混点解析
    第二部分:程序代码评价或者找错有符号整型和无符号整型混合运算时,有符号型自动转换成无符号型,运算的结果是无符号的。如果参与运算的数据类型不同,会自动转化为同一类再运算,这就是自动转换自动转换的规则如下:1.当参与运算的数据的类型不同时,编译系统会自动先将他们转换成......
  • 信息收集:网络空间测绘FOFA,查询语法最全使用方法(图文解析)
    前言经小绿书粉丝投稿,特意搜集了一些fofa的使用教程和一些高级用法什么是FOFA?官网描述:FOFA-网络空间资产搜索引擎是华顺信安推出的一款通过对全球网络对外开放服务的资产进行主动或被动方式探测、抓取、存储,分析整理不同种类的网络空间资产指纹信息(规则),并对符合规则的资产......
  • 错误 1 error LNK2019: 无法解析的外部符号 _MQTTClient_create,该符号在函数 "protect
    前言全局说明错误1errorLNK2019:无法解析的外部符号_MQTTClient_create,该符号在函数"protected:virtualint__thiscallCmfc_mqttclientpoweronoffDlg::OnInitDialog(void)"(?OnInitDialog@Cmfc_mqttclientpoweronoffDlg@@MAEHXZ)中被引用一、说明环境:Windows1......
  • Java编程指南:高级技巧解析 - Excel单元格样式的编程设置
    最新技术资源(建议收藏)https://www.grapecity.com.cn/resources/前言在Java开发中,处理Excel文件是一项常见的任务。在处理Excel文件时,经常需要对单元格进行样式设置,以满足特定的需求和美化要求,通过使用Java中的相关库和API,我们可以轻松地操作Excel文件并设置单元格的样式。在......