strlen和sizeof的区别

大家好,我是苏貝,本篇博客带大家了解C语言中的sizeof和strlen(仅此一篇让你明白它们两的差别),如果大家觉得我写的不错的话,可以给我一个赞👍吗,感谢❤️
在这里插入图片描述

文章目录

  • strlen
  • sizeof

在开始文章之前,我希望读者能明白sizeof和strlen是两个不同的东西,它们之间没有联系

strlen

strlen(string length),翻译为字符串长度,所以strlen的功能就是求字符串长度。它只能作用于字符串,是C语言中的库函数,使用时要引用<string.h>这个头文件。

那什么是字符串呢?简单来讲,由 “ ”(双引号)引起来的一串字符就是字符串,如“hello world!” “abcde”等。那我们接着介绍转义字符 ‘\0’ ,每个字符串结尾处都隐藏有 ‘\0’ ,它是字符串的结束标志,所以我们在用strlen函数求字符串长度时,遇见 ‘\0’ 时就停止读取字符串,字符串长度为 ‘\0’ 之前的字符个数,不包括 ‘\0’ 。

示例1:

int main()
{
	printf("%d\n", strlen("abcdefg"));
	printf("%d\n", strlen("ab\0cdefg"));
	return 0;
}
//7 2

第一个字符串为:abcdefg\0,所以计算结果为 ‘\0’ 之前的个数=7
第二个字符串在 ‘\0’ 后面虽然还有5个字符,但是strlen在遇见 ‘\0’ 时就停止读取字符串,所以strlen只计算 ‘\0’ 前面的ab字符个数=2

示例2:

除了上面所说的由“ ”引起来的一串字符为字符串外,字符串也可由字符数组来存储每一个字符,如下:

int main()
{
	char arr1[] = { 'a','b','c' };
	char arr2[] = { 'a','b','c','\0' };
	printf("%d\n", strlen(arr1));
	printf("%d\n", strlen(arr2));
	return 0;
}
//随机值  3

对于第二个答案3,是因为 ‘\0’ 前边只有abc 3个字符;至于第一个答案,因为strlen函数只有在遇见 ‘\0’ 时才停止读取字符串,但是在读完abc后,我们并不清楚在后面哪个内存单元存储的是 ‘\0’ ,所以编译器会返回一个随机值


sizeof

sizeof是操作符,不是函数,sizeof(x)的功能是求x所占空间内存的大小,单位是字节。它可作用于字符串、数组、内置类型(int,double等)、指针类型……它的返回类型是size_t(也可以认为是无符号整型),用%zd或者%u来接收

作用于字符串:
sizeof计算的是字符串所占空间的大小,包括最后的 ‘\0’

int main()
{
	printf("%zd\n", sizeof("ab\0cdefg"));
	return 0;
}
//9

该字符串为:ab\0cdefg\0, ‘\0’ 是转义字符,\和0合起来被存储在一个内存空间,字符是char类型的,所以sizeof计算的结果= 9 * 1 = 9

作用于数组:

int main()
{
	int arr[10] = { 0 };
	char ch[5] = { 0 };
	printf("%zd\n", sizeof(arr));
	printf("%zd\n", sizeof(ch));
	return 0;
}
//40 5

arr数组是int类型的,有10个元素,所以所占空间大小=10* 4= 40个字节
ch数组是char类型的,有5个元素,所以所占空间大小=5* 1= 5个字节

拓展:
数组名是数组首元素地址,除了以下2种情况:
(1)sizeof(数组名),此时的数组名代表整个数组,所以计算结果是整个数组的大小
(2)&数组名,此时的数组名也代表整个数组,取出的是整个数组的地址,返回的是数组首元素的地址

作用于内置类型:

int main()
{
	printf("%zd\n", sizeof(char));
	printf("%zd\n", sizeof(short));
	printf("%zd\n", sizeof(int));
	printf("%zd\n", sizeof(float));
	printf("%zd\n", sizeof(double));
	printf("%zd\n", sizeof(long));
	printf("%zd\n", sizeof(long long));
	return 0;
}
//1 2 4 4 8 4 8

作用于指针类型:

int main()
{
	printf("%zd\n", sizeof(char*));
	printf("%zd\n", sizeof(short*));
	printf("%zd\n", sizeof(int*));
	printf("%zd\n", sizeof(float*));
	printf("%zd\n", sizeof(double*));
	return 0;
}

在32位平台下,结果都为4
在64位平台下,结果都为8

在32位平台下,有32根地址线,那么假设每根地址线在寻址的时候产生高电平(高电压)和低电平(低电压)就是(1或者0);
那么32根地址线产生的地址就会是:
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000001

11111111 11111111 11111111 11111111
每个地址有32个比特位,即32/8=4个字节
同理:对于64位平台下,有8个字节


好了,那么本篇博客就到此结束了,如果你觉得本篇博客对你有些帮助,可以给个大大的赞👍吗,感谢看到这里,我们下篇博客见❤️

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Simulink仿真模块 -Scope

Scope模块的作用是显示仿真过程中生成的信号。它包含在以下库中: 库: Simulink / Commonly Used BlocksSimulink / SinksHDL Coder / Commonly Used BlocksHDL Coder / Sinks 如图所示: Simulink Scope 模块和 DSP System Toolbox™ Time Scope 模块显示时域信号。…

【APITable】教程:创建并运行一个自建小程序

1.进入APITable&#xff0c;在想要创建小程序的看板页面点击右上角的【小程序】&#xff0c;进入小程序编辑页面。 2.创建一个新的小程序区。 点击【 添加小程序】 点击创建小程序&#xff0c;选择模板&#xff0c;输入名字。 3.确定后进入小程序部署引导页面。 4.打开Xshell 7…

春秋云镜 CVE-2022-0410

春秋云镜 CVE-2022-0410 WordPress plugin The WP Visitor Statistics SQLI 靶标介绍 WordPress plugin The WP Visitor Statistics (Real Time Traffic) 5.6 之前存在SQL注入漏洞&#xff0c;该漏洞源于 refUrlDetails AJAX 不会清理和转义 id 参数。 登陆账户&#xff1a;u…

LeetCode 热题 100 JavaScript -- 74. 搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非递减顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 …

D* 算法完全解析(应该是全网最详细的吧)

花了几天时间学习了下 D* 算法&#xff0c;只能说熟悉了一下流程&#xff0c;远不能说掌握&#xff0c;算法实在是非常巧妙 参考 《制造车间无人搬运系统调度方法研究》 《基于D*Lite算法的移动机器人路径规划研究》 人工智能: 自动寻路算法实现(四、D、D*算法) D* 算法 D*路径…

java 文件/文件夹复制,添加压缩zip

复制文件夹,并压缩成zip 需求&#xff1a;创建A文件夹&#xff0c;把B文件夹复制到A文件夹。然后把A文件夹压缩成zip包 public static void main(String[] args) throws Exception {try {String A "D:\\dev\\program";String B "D:\\program";// 创建临…

iOS- git对单个或者多个文件权限设置,使用pre-commit hook 和shell脚本,拦截校验

前提&#xff1a;最近&#xff0c;由于团队代码规范和安全问题&#xff0c;有一些文件只能是指定用户才能修改。 对比&#xff1a;调查了一下资料&#xff0c;发现好多人都在使用pre-commit技术。于是&#xff0c;就朝着这个方向去研究。于是抽空写了脚本&#xff0c;在提交的…

写一个函数返回参数二进制中 1 的个数(c语言三种实现方法)

&#xff08;本文旨在自己做题时的总结&#xff0c;我会给出不同的解法&#xff0c;后面如果碰到新的题目还会加入其中&#xff0c;等于是我自己的题库。 1.写一个函数返回参数二进制中 1 的个数。 比如&#xff1a; 15 0000 1111 4 个 1 方法一&#xff1a; #include…

form中表单切换,导致 relus 中的事件无法触发,原因:页面切换不要一直切换DOM,会导致问题,需要都显示出来

修改前&#xff0c;因为重复渲染DOM导致绑定rules失效 修改前代码使用 computed 计算出渲染的DOM&#xff0c;影响rules事件<el-formref"form"inline:model"billDetailCopy":rules"rules"size"small"label-position"right&quo…

WebStorm

WebStorm 介绍下载安装Activation 介绍 WebStorm是由JetBrains公司开发的一款集成开发环境&#xff08;IDE&#xff09;&#xff0c;主要专注于前端开发和Web开发。它旨在提供一套强大的工具和功能&#xff0c;以支持开发者在前端项目中编写、调试和维护代码。 JetBrains官网: …

Java中声明,定义,分配内存,初始化,赋值,是啥?

一. 声明&#xff0c;定义和分配内存 在Java中&#xff0c;声明和定义是同一个意思&#xff0c;不做区分。下面这些都是声明&#xff08;定义&#xff09;一个变量。 栈&#xff1a;存放局部变量&#xff08;包括基本数据类型的变量和对象的引用&#xff09; 堆&#xff1a;存…

配置:Terminal和oh-my-posh

目录 命令行安装oh-my-posh查看安装情况配置PowerShell启用oh-my-posh、设置主题配色安装字体Terminal中的配置 命令行安装oh-my-posh Set-ExecutionPolicy Bypass -Scope Process -Force; Invoke-Expression ((New-Object System.Net.WebClient).DownloadString(https://ohmy…

YAPi在线接口文档简单案例(结合Vue前端Demo)

在前后端分离开发中&#xff0c;我们都是基于文档进行开发&#xff0c;那前端人员有时候无法马上拿到后端的数据&#xff0c;该怎么办&#xff1f;我们一般采用mock模拟伪造数据直接进行测试&#xff0c;本篇文章主要介绍YApi在线接口文档的简单使用&#xff0c;并结合Vue的小d…

流量,日志分析--理论

提供资料&#xff1a; Wireshark 基本语法&#xff0c;基本使用方法&#xff0c;及包过虑规则 : https://blog.csdn.net/qq_17457175/article/det ails/53019490 ctf 常见流量分析题目类型 : https://ctf-wiki.org/misc/traffic/introduction/ windows 日志 : https://jone…

IntelliJ IDEA和Android studio怎么去掉usage和作者提示

截止到目前我已经写了 600多道算法题&#xff0c;其中部分已经整理成了pdf文档&#xff0c;目前总共有1000多页&#xff08;并且还会不断的增加&#xff09;&#xff0c;大家可以免费下载 下载链接&#xff1a;https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ 提取码&#xf…

5.PyCharm基础使用及快捷键

在前几篇文章中介绍了PyCharm的安装和汉化,本篇文章一起来看一下PyCharm的基本用法和一些快捷键的使用方法。 本篇文章PyCharm的版本为PyCharm2023.2 新建项目和运行 打开工具,在菜单中——文件——新建项目 选择项目的创建位置(注意最好不要使用中文路径和中文名项目名称…

基于Gradio的GPT聊天程序

网上很多别人写的&#xff0c;要用账号也不放心。就自己写了一个基于gradio的聊天界面&#xff0c;部署后可以本地运行。 特点&#xff1a; 可以用openai的&#xff0c;也可以用api2d&#xff0c;其他api可以自己测试一下。使用了langchain的库 可以更改模型&#xff0c;会的…

IO密集型服务提升性能的三种方法

文章目录 批处理缓存多线程总结 大部分的业务系统其实都是IO密集型的系统&#xff0c;比如像我们面向B端提供摄像头服务&#xff0c;很多的接口其实就是将各种各样的数据汇总起来&#xff0c;展示给用户&#xff0c;我们的数据来源包括Redis、Mysql、Hbase、以及依赖的一些服务…

IP协议

网络层 对于网络层来说&#xff0c;它是传输层协议的具体实施&#xff0c;那么它具体是如何实施的呢&#xff1f; IP协议 IP能够实现将数据从A主机送到B主机&#xff0c;在网络中&#xff0c;每一个IP报文都包含了它的目标网络和目标主机。 而IP协议就是网络层使用的协议。 I…

【mysql】—— 表的约束

目录 序言 &#xff08;一&#xff09;空属性 &#xff08;二&#xff09;默认值 &#xff08;三&#xff09;列描述 &#xff08;四&#xff09;zerofill &#xff08;五&#xff09;主键 &#xff08;六&#xff09;自增长 &#xff08;七&#xff09;唯一键 &#…
最新文章