【C语言】sizeof和strlen的区别【详解】

news2024/12/23 6:30:51

目录

一.sizeof和strlen的主要区别

二.sizeof和strlen分别讲解(含例题和详解)

1.sizeof

在计算字符型数组时(例题+讲解)

计算整型数组(例题+讲解)

2.strlen

例子一(讲解):

例子二(讲解)

三.典型例题

例1

答案解析:

例2

答案解析:


一.sizeof和strlen的主要区别

1.sizeof运算符,而strlen 是C语言库函数中的一个函数(使用时包含头文件(string.h))

对于sizeof来说,使用时不加()也是正确的,这样也可以说明sizeof不是函数

2.sizeof 操作符用于计算变量或类型的大小,一般单位为字节,通常用于计算内存大小。

3.strlen是计算字符串长度的,遇到\0结束,返回不包括\0,即如果没有\0则会计算出随机值;


二.sizeof和strlen分别讲解(含例题和详解)

1.sizeof

在计算字符型数组时(例题+讲解)

如代码:char  arr1 []="hello bite!"  因为字符串末尾会自动添加\0作为结束标志 所以这个字符串实际是 “hello  bite!\0” 其中一个字符占一个字节,空格和\0也各占一个字节 一共就是12个字节;

代码:

int main()
{
	char arr[] = "hello bite!";
	int ret = sizeof(arr);

	printf("%d\n",ret);
	return 0;
}

运行结果是:

 

 


计算整型数组(例题+讲解)

如代码:int arr2 [5]={0};因为是整型,所以一个元素占4个字节(一个整型所占大小);数组大小就是   元素个数×4   即arr2所占大小是5×4=20个字节

代码:


int main()
{
	int arr[5] = { 0 };
	int ret=sizeof(arr);

	printf("arr所占内存大小为:%d字节\n",ret);

	return 0;
}

运行结果:

 

2.strlen

3.strlen是计算字符串长度的,遇到\0结束,返回不包括\0,即如果没有\0则会计算出随机值;

例子一(讲解)

char arr[]="abcdefg";   实际字符串内容为 "abcdefg\0" 即strlen所计算的是\0之前的"abcdefg",即算出字符串长度为7个字符;

#include <string.h>

int main()
{
	char arr[] = "abcdefg";
	int len = strlen(arr);
	printf("字符串长度为:%d个字符\n",len);

	return 0;
}

运行结果:

 



例子二(讲解)

char arr[]={ 'a' , 'b' , 'c', 'd' , 'e' , 'f' , 'g' };  该字符数组中放入的是 a b c d e f g 这7个字符;因为不是字符串,所以末尾没有\0;没有\0,当使用strlen函数进行计算是就不知道在哪里结束;计算结果就是我们想不到的随机值(如下面的运行结果14028835)意思是当使用strlen函数进行计算时,当计算完arr数组时,因为没遇到\0,所以还要继续往后计算,(这里直到计算了14028835个字符后)才遇到\0结束;

代码:

#include <string.h>

int main()
{
	char arr[] = { 'a','b','c','d','e','f','g' };
	int len = strlen(arr);
	printf("arr的长度为:%d字符\n");


	return 0;
}

运行结果:

 


三.典型例题

例1

答案解析:

str字符数组使用"hello bit"初始化,最终也会将'\0'放置到数组中,因此数组中总共有10个元素

sizeof(str):获取数组的总大小,10个元素,每个元素占1个字节,因此总共是10个字节

strlen(str): 获取字符串中有效字符的个数,不算'\0',因此总共9个有效字符

故上述printf会分别打印:10  9

因此,选择A

例2

答案解析:

对于int arr[] = {1,2,(3,4),5}数组,里面总共有4个元素,(3,4)为逗号表达式,取后者,因此数组中元素分别为:1,2,4,5

而sizeof(arr)求的是整个数组所占空间的大小,即:4*sizeof(int)=4*4=16

因此,选择B

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/592096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

运维监控Grafana部署

运维监控Grafana部署 简介 安装 部署形式 Grafana支持两种部署形式 自行部署, 可以部署在操作系统之上. 自行提供服务器, 域名等.Grafana官方托管. 无需安装, 在线注册即可得到一个专属于自己的Grafana, 但是要花钱的. 是一种SaaS服务 我们课程选择方式1 安装 Grafana支…

0531最后的挣扎结束于传说中的段错误

部署训练后的缺陷检测模型 Linux Ubuntu18.04双机尝试 报错&#xff0c;Linux内核或是编译器版本不匹配&#xff0c;多次尝试更改18.04的gcc&#xff0c;g&#xff0c;gcc-arm-linux&#xff0c;garm-linux的代码&#xff0c;尝试在Makefile文件里更改编译器路径、添加LInux内…

智慧工厂主题 Meetup 线下报名+福利开启!IoTDB X EMQ 构建数据平台赋能智能制造...

随着全球制造业的竞争日益激烈&#xff0c;智慧工厂成为当今制造业的重要趋势之一。智慧工厂采用了先进的物联网、大数据等科技手段&#xff0c;以期通过智能化、数字化管理和生产&#xff0c;实现高度自动化和高效生产。因此&#xff0c;如何通过计算分析挖掘生产数据价值&…

【Android定制】修改BUILD_AGO_GMS = no 和 BUILD_GMS=no属性

文章目录 概要名词解释细节小结 概要 在安卓底层源码中&#xff0c;有这样的两个属性&#xff0c;这两个第一眼看上去都像是带不带谷歌&#xff0c;BUILD_AGO_GMS no和BUILD_GMSno有什么区别&#xff1f;&#xff1f; 如果带了谷歌&#xff0c;那么这个设备就差不多是国外定…

SQL数据库的整体结构、索引、MVCC、锁、日志、查询优化,三大范式等

关系型数据库和非关系型数据库 SQL:关系型数据库指的是使用关系模型&#xff08;二维表格模型&#xff09;来组织数据的数据库。(mysql,sqlserver,sqllite,oracle) 关系数据库的优点&#xff1a; 容易理解&#xff0c;符合正常思维方式&#xff1b;都是用表格形式&#xff0c;格…

大数据:Hadoop HDFS,基础架构,去中心化,中心化模式,HDFS基础架构,虚拟机和云服务器部署HDFS

大数据&#xff1a;Hadoop HDFS&#xff0c;基础架构&#xff0c;去中心化&#xff0c;中心化模式&#xff0c;HDFS基础架构&#xff0c;虚拟机和云服务器部署HDFS 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算…

美颜SDK的市场需求与技术策略:商业化落地的关键因素

随着人们对于美的追求不断加强&#xff0c;美颜技术也在不断进步&#xff0c;其中美颜SDK的出现极大地方便了开发者&#xff0c;使得美颜技术能够更加便捷地应用于各种应用中。那么&#xff0c;美颜SDK市场需求和技术策略是什么&#xff1f;商业化落地的关键因素又是什么呢&…

【C++】C++11 线程库

文章目录 一、thread 线程库二、mutex 锁三、atomic 原子性操作四、RAII 管理锁资源五、condition_variable 条件变量 一、thread 线程库 在 C11 之前&#xff0c;由于 C 没有对各平台的线程接口进行封装&#xff0c;所以当涉及到多线程编程时&#xff0c;编写出来的代码都是和…

ChatGPT赋能Scrum实践

对于Scrum实践者来说&#xff0c;以ChatGPT为代表的的大语言模型是很有效的工具&#xff0c;但要用好这个工具需要一些技巧&#xff0c;本文介绍了60个适用于Scrum实践的提示&#xff0c;可以帮助ChatGPT有效输出适用于Scrum实践的内容。原文: 60 ChatGPT Prompts Plus Prompt …

chatgpt赋能python:Python中的SEO

Python 中的 SEO 搜索引擎优化(SEO)是指通过改进网站的结构和内容&#xff0c;使其在搜索引擎中的排名更高&#xff0c;从而吸引更多的访问者。Python是一种流行的编程语言&#xff0c;其在SEO中也占有重要的地位。 Python 中的关键词密度 搜索引擎通常会关注网页中的关键词…

.Net Core——用代码写代码?

想要用代码写代码&#xff0c;肯定是绕不开反射的。反射的概念相比都不陌生&#xff0c;只是应用多少就因人而异&#xff0c;今天分享一个代码生成器的思路&#xff0c;仅供参考&#xff0c;不要过分依赖哦。 思路分析 众所周知&#xff0c;利用反射可以在程序运行时获取到任…

【赏】java:编写一个SortedList接口

下面是SortedList接口的示例代码:import java.util.List;public interface SortedList<T extends Comparable<T>> extends List<T> {List<T> sort(List<T> list);int binarySearch(T value); }下面是对于SortedList接口的一个实现示例:import …

如何系统地学习IT技术

从基础技术到高级应用&#xff0c;IT技术发展迅速&#xff0c;我们需要建立系统性的学习方法&#xff0c;才能跟上它的速度。接下来&#xff0c;我将分享我的个人经验&#xff0c;介绍如何系统地学习IT技术&#xff0c;以及如何在快速学习过程中确保自己的技术水平越来越高。 …

加湿助眠仪语音IC芯片 白噪音语音方案 WTN6040F-8S

近年来&#xff0c;随着人们健康意识的不断增强&#xff0c;助眠仪逐渐成为了一种备受欢迎的家居健康设备。随着科技的不断升级&#xff0c;助眠仪也在不断地进行改进&#xff0c;以满足用户需求。其中&#xff0c;一种值得注意的改进就是助眠仪音乐播报芯片的应用。加湿助眠仪…

c++ 11标准模板(STL) std::map(九)

定义于头文件<map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class map;(1)namespace pmr { template <class Key, class T, clas…

国产系统:麒麟之人大金仓数据库部署

一、基本信息和资源 1.1 查看服务器信息 [root7PGxjKPL4 ~]# cat /etc/*release Kylin Linux Advanced Server release V10 (Sword) DISTRIB_IDKylin DISTRIB_RELEASEV10 DISTRIB_CODENAMEjuniper DISTRIB_DESCRIPTION"Kylin V10" DISTRIB_KYLIN_RELEASEV10 DISTRI…

Springboot异步执行

异步执行 1.基于Async注解的方式在异步的方法上加 Async注解&#xff0c;调用接口后基于Async注解的方式优缺点: 2.使用 CompletableFuture 实现异步任务在实现类中创建CompletableFuture 类型的方法优缺点: 3.使用 TaskExecutor 实现异步任务优缺点: 1.基于Async注解的方式 As…

电子企业使用MES管理系统有没有弊端

随着制造业的不断现代化和数字化&#xff0c;越来越多的电子企业开始使用MES生产管理系统。电子企业MES系统是一种用于监控和管理制造业生产过程的软件&#xff0c;能够帮助企业提高生产效率、降低成本、提高质量和灵活性。然而&#xff0c;电子企业使用MES管理系统也存在一些弊…

Autohotkey按键映射

文章目录 功能前缀鼠标按键键盘按键虚拟键码和扫描码实操 功能前缀 尽管在初步使用中已经对常见热键做了说明&#xff0c;但为了本文的完整性&#xff0c;这里还是重新表述一下 #!^<^>!winAltCtrlShiftAlt Gr 其中&#xff0c;<, >为修饰符&#xff0c;用于区分…

使用不同类型注释的小肠路径跟踪深度强化学习

文章目录 Deep Reinforcement Learning for Small Bowel Path Tracking Using Different Types of Annotations摘要本文方法环境stateActionreward 实验结果 Deep Reinforcement Learning for Small Bowel Path Tracking Using Different Types of Annotations 摘要 小肠路径…