strlen和sizeof的区别

这篇具有很好参考价值的文章主要介绍了strlen和sizeof的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

相信大多数初步了解C语言的小伙伴们,应该对strlen和sizeof都不陌生,但是在使用时总会出现或多或少的疑问,我将用这一篇博客解决困扰大家许久的问题(仅此一篇你就会了解的透彻),请耐心阅读!!!


在深究strlen和sizeof的区别时,首先我们需要知道这两个函数所执行的功能分别时是什么?

strlen:

strlen=string length,顾名思义,该函数是用来求解字符串的长度的,所以我们也应该探讨一下字符串的概念;我们都知道在编译器中输入printf(”Hello World!”),就会输出”Hello World!”,这就是一个字符串,类似这种由双引号引起来的一串字符称为字符串面值,或者简称字符串。接着我们就需要了解一下“\0"这个转义字符了,记住任何一个字符串的结尾都会隐藏一个“\0",他是字符串的结束标志,所以我们在用strlen函数读取字符串的时候,当我们遇到“\0"时我们就要停止读取,此时“\0"前字符的个数就是字符串的长度,注意:这里的“\0"只是结束标志,仅仅告诉我们strlen函数读取到这里就要停止了,“\0"不算做一个字符!!!

示例1:

注:使用strlen时需要引用<string.h>这个头文件!!!

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main()
{
	printf("%d\n", strlen("abcdef"));
	return 0;
}

sizeof和strlen区别,C语言学习,c语言,c++

 我们可以把字符串”abcdef“在内存中的存储结构给大家看一下

sizeof和strlen区别,C语言学习,c语言,c++

 字符串””abcdef“后面隐藏了一个”\0",所以不读,故字符串长度为6。

示例2:

众所周知,C语言中没有字符串对应的类型,它不像整型用int存储,浮点型用float或者double来存储,所以我们定义一个字符串时一般有常用的两种方式,示例1中的“abcdef”只是字符串的一种,示例2我将会再介绍一种,即用一个字符数组来存储字符串的每一个字符。第二种定义方式对于strlen的求解又有什么情况呢?

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main()
{
	char arr1[] = {'a','b','c','d','e','f'};
	char arr2[] = {'a','b','c','d','e','f','\0'};
	printf("%d\n", strlen(arr1));
	printf("%d\n", strlen(arr2));
	return 0;
}

arr1数组只是单纯把字符串“abcdef”的每一个字符用数组存储起来,而arr2数组则是多存储了一个“\0",究竟有什么不同呢?我们一起来看运行及如果。

sizeof和strlen区别,C语言学习,c语言,c++

我们可以看到arr1数组的长度为38,arr2数组的长度为6,为什么呢?同样我们需要探讨两个数组在内存中的存储状况。

sizeof和strlen区别,C语言学习,c语言,c++

 arr2数组的存储情况和示例1字符串的存储情况相同,而arr1却不同,所以arr2的长度为6我们就不再赘述,主要研究一下arr1的长度为什么是38。我们都知道字符串的结束标志为”\0",对于arr1数组来说,没有在数组中额外存储”\0",所以编译器在读取时,并不会像我们所期望的那样停止读取,故长度当然不会时6,至于为什么是38,是因为在读取时,编译器读取完arr1时会继续往后读取,直到读取到”\0",arr1在读取完第38个字符后才会遇到”\0";由于每个人的电脑和编译器不同,读取的长度也不一样,所以arr1这种情况一般我们认为它读取的结果为随机值!!!

示例3:

为了说明”\0"的重要性,我们再举一个例子来说明。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main()
{
	
	printf("%d\n", strlen("abc\0def"));
	
	return 0;
}

sizeof和strlen区别,C语言学习,c语言,c++

这里的字符串“abc\0def"读取的结果是3想必不用赘述了吧!!!


sizeof: 

相比strlen函数,sizeof就简单多了,sizeof其实就是一个运算符,主要用来计算所占空间字节的大小。在初识C语言(一)中我曾讲过用sizeof求解各个数据类型所占内存空间的大小,想要查阅的同学们可自行查阅了解:初识C语言(一)_徐憨憨!的博客-CSDN博客提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言什么是C语言第一个C语言程序数据类型常量,变量字符串+转义字符+注释选择语句循环语句函数数组操作符常见关键字define定义常量和宏指针结构体前言从本章开始,我们将正式进入C语言的学习当中,首先为了对C语言有一个初步的认识,我将会对C语言所有比较重要的内容做一个浅浅的了解。有的同学会疑问我指针,数组等一些还没有开始学这些内容为什么会出现在本章中,.https://blog.csdn.net/qq_47908816/article/details/123935676?spm=1001.2014.3001.5501所以我在这里只介绍一下用sizeof来计算一般情况,同样拿”abcdef“来举例吧。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main()
{
	char arr[] = "abcdef";
	printf("%d\n", sizeof("abcdef"));
	
	return 0;
}

 sizeof和strlen区别,C语言学习,c语言,c++

 此时的结果是7,比strlen的结果多1,那是因为sizeof计算的是所占字节大小,所以字符串后面隐藏的”\0"也要计算进去,我们可以调试监视一下arr这个数组。 

sizeof和strlen区别,C语言学习,c语言,c++

 我们可以清楚的看见arr[6] = '\0',故sizeof(arr)= 7。


想必到这里大家对strlen函数和sizeof运算符的区别都有了深刻的认识,如果对你有帮助,希望大家关注,点赞,后续会为大家继续带来相关知识,谢谢!!!文章来源地址https://www.toymoban.com/news/detail-785740.html

到了这里,关于strlen和sizeof的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言之区分sizeof 和 strlen】

    前言: 首先,我们需要明白它们的 根本区别,sizeof属于也属于单目操作符,而strlen属于库函数 / 知识点回顾 / 单目操作符:单目运算符对应只有一个操作数 常见的单目操作符: 常见的单目操作符 描述 ! 逻辑非 ’ - ‘ 负 ’ + ‘ 正 取地址 sizeof 计算一个数据类型的

    2024年02月11日
    浏览(33)
  • 深入解析C++中sizeof和strlen的奥秘:区别、应用与技巧全揭秘!

      sizeof  和  strlen  是 C++ 中用于处理字符串的两个不同的操作符,它们的作用和使用场景有很大的区别。 sizeof  是一个运算符,不是一个函数,用于获取一个类型或变量的字节大小。 对于数组, sizeof  返回整个数组的字节大小。 对于指针, sizeof  返回指针本身的字节大小

    2024年01月25日
    浏览(43)
  • 【C语言】指针进阶之sizeof和strlen函数的对比

    目录  1.sizeofyu 2.strlen函数   3.sizeof与strlen的对比   sizeof计算变量所占内存内存空间 大小 的,单位是 字节 ,如果操作数是类型的话,计算的是使⽤类型创建的变量所占内存空间的大小。 sizeof 只关注占⽤内存空间的大小,不在乎内存中存放什么数据。 举个例子: 运行结果

    2024年01月22日
    浏览(44)
  • C语言中常用的字符串函数(strlen、sizeof、sscanf、sprintf、strcpy)

      strlen即为string length,顾名思义该函数是用来求字符串长度的。在介绍strlen函数之前,我们要先介绍一下\\\"\\0\\\"这个转义字符。任何一个字符串后面都会隐藏一个\\\"\\0\\\",该转义字符是字符串结束的标志,所以我们在使用strlen函数求字符串长度时,遇到\\\"\\0\\\"时停止读取,此时\\\"\\0\\\"前的

    2024年01月18日
    浏览(37)
  • sizeof和strlen求取数组&指针之辨析

    目录 一维数组中sizeof Vs  strlen 整型数组sizeof 字符数组 sizeof strlen  字符串数组 sizeof strlen  字符串的指针char *p sizeof strlen  二维数组中sizeof  总结 今天主要来讲题目主要是数组指针辨析题和笔试题。🆗最近心情有点焦虑。大家一定专注眼前的事情,别太焦虑。 数组名:就是

    2024年02月07日
    浏览(31)
  • C++中sizeof()、size()、strlen()、length()详解

    1、size 是一个 函数 ,它是在程序运行时才会计算, 用来求数组或容器中元素的个数 。 在字符串string中它与length的作用相同,只是length只能应用于string中,而不能应用于STL的容器中 2、sizeof 为 运算符 , 其结果是求对应参数的字节大小 ,它的值是在编译的时候就计算完成了

    2024年04月16日
    浏览(31)
  • C++求字符串长度————sizeof()、size()、strlen()以及length()详解

    一、区分sizeof()和strlen() 首先, sizeof() 【操作数所占空间的字节数大小】是一种c中的 基本运算符 。(是操作符,并不是函数)可以以类型、指针、数组和函数等作为参数。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。由于在编译时计算,因此 sizeof() 不

    2024年02月02日
    浏览(44)
  • 编程语言学习笔记-架构师和工程师的区别,PHP架构师之路

    🏆作者简介,黑夜开发者,全栈领域新星创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于PHP专栏:PHP进阶实战教程。 🎉欢迎 👍点赞✍评论⭐收藏 什么是架构师

    2024年02月12日
    浏览(36)
  • 6.Go语言学习笔记-结合chatGPT辅助学习Go语言底层原理

    1、Go版本 2、汇编基础 推荐阅读:GO汇编语言简介 推荐阅读:A Quick Guide to Go\\\'s Assembler - The Go Programming Language 精简指令集 数据传输: MOV/LEA 跳转指令: CMP/TEST/JMP/JCC 栈指令: PUSH/POP 函数调用指令: CALL/RET 算术指令: ADD/SUB/MUL/DIV 逻辑指令: AND/OR/XOR/NOT 移位指令: SHL/SHR JCC有条件跳转: JE

    2024年02月04日
    浏览(34)
  • C语言学习笔记——C语言结构

    C语言是一种面向过程的结构化的语言,同时具有高级语言和汇编语言的优点 所有的C语言程序经过编译和连接之后才能被计算机执行 头文件是一种特殊的文件,记录了很多可以直接引用头文件然后使用的函数,也可通过#define声明函数、变量、宏等的定义 头文件通常包含在源

    2024年02月11日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包