C语言sizeof和strlen的区别?

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

sizeof和strlen有什么区别?

sizeof本质是运算符(sizoof既是关键字也是运算符,不是函数哈),而strlen就是函数。sizeof后面如果是类型,则必须加括号,如果是变量,可以不加括号。

sizeof运算符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能够容纳实现所建立的最大对象的字节大小。

sizeof可以用类型作为参数,而strlen只能用char * 作为参数,而且必须是以\0结尾的。sizeof还可以以函数作为参数,如int test(),则sizeof(test())的值等于sizeof(int)的值,在32位计算机下,该值为4。

大部分编译程序的sizeof都是在编译的时候计算的,所以可以通过sizeof(x) 来定义数组维数,通常用来计算占用内存大小。而strlen则是在运行阶段计算的,用来计算字符产的实际长度。

如:
char str[20] = “0123456789”,字符数组str是编译期大小已经固定的数组,在32位计算机下,sizeof(str) = 20,而strlen是在运行期计算的大小,strlen(str) = 10。

思考:

不使用sizeof,怎么求int占用的字节数?

#define my_sizeof(value) (char *)(&value + 1) - (char *)(&value)

&value 表示获取变量 value 的地址。(char )(&value + 1) 表示获取变量 value 后面一个元素的地址,通过将其强制转换为 char 类型来确保以字节为单位进行计算。最后,用 (char *)(&value + 1) - (char *)(&value) 来计算两个地址之间的差值,得到变量 value 的大小。

这个宏定义是一种快速获取变量大小的方法,但在某些特殊情况下可能会有限制。(如包含了 padding 的结构体、指向函数的指针等),可能会导致计算结果不准确。文章来源地址https://www.toymoban.com/news/detail-688570.html

Tips:

  1. size_t 是 C 和 C++ 中用于表示内存大小和对象大小的无符号整数类型,在处理内存和数组相关的操作时非常重要。
  1. sizeof 运算符在编译时求值,而不是运行时。它的结果在编译时就确定了,不会因为变量的具体取值而改变。此外,sizeof 运算符不能用于动态分配的内存或函数类型。
  1. 在 32 位计算机上,指针类型的大小通常为 4 字节(32 位)。这是因为 32 位的寻址范围为 2^32,即 4GB,因此一个指针占据 4 字节的内存空间来存储一个地址。
    而在 64 位计算机上,指针类型的大小通常为 8 字节(64 位)。这是因为 64 位的寻址范围为 2^64,即非常大,需要 8 个字节来存储一个地址。

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

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

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

相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2024年02月02日
    浏览(54)
  • 【C++】sizeof()、size()、length()的用法及区别

    在c++中,length()只是用来获取字符串的长度。在获取字符串长度的时候size()和length()函数作用相同。 size函数除了可以获取字符串长度外,还可以获取vector类型的长度。 在c++中,sizeof()用于获取数据类型或者变量所占内存空间的大小。可以通过sizeof计算获取数组元素个数。

    2024年02月14日
    浏览(40)
  • C语言----C语言中sizeof的用法

    sizeof是计算变量在内存的占空间的大小,单位是字节 (1)使用sizeof查看数据类型占空间大小 如下,可以查看C语言中各种基本数据类型的占用空间的大小 执行结果如下: (2)使用sizeof计算基本数据类型变量的占用空间的大小 如下,可以对基本数据类型的变量计算占用空间

    2024年02月06日
    浏览(41)
  • C语言 strlen()函数

    一、strlen()函数的简介         strlen函数:计算的是字符串str的长度,从字符的首地址开始遍历,以 \\\'\\0\\\' 为结束标志,然后将计算的长度返回,计算的长度并不包含\\\'\\0\\\'。下面是库中的strlen()函数: size_t  strlen (const char* str); 函数的参数为------const char* str:字符指针

    2024年02月16日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包