C语言中sizeof和strlen的区别是什么

C语言sizeofstrlen的区别是:strlen是一个函数,用来计算指定字符串str的长度,但不包括结束字符(即null字符);而sizeof是一个单目运算符,不是函数。

C语言中sizeof和strlen的区别是什么

区别分析:

strlen 是一个函数,它用来计算指定字符串 str 的长度,但不包括结束字符(即 null 字符)。其原型如下面的代码所示:

size_t strlen(char const* str);

登录后复制

也正因为 strlen 是一个函数,所以需要进行一次函数调用,调用示例如下面的代码所示:

char sArr[] = "ILOVEC";/*用strlen()求长度*/printf("sArr的长度=%d", strlen(sArr));

登录后复制

很显然,上面示例代码的运行结果为 6(因为不包括结束字符 null)。这里需要特别注意的是,函数 strlen 返回的是一个类型为 size_t 的值,从而有可能让程序导致意想不到的结果,如下面的示例代码所示:

立即学习“C语言免费学习笔记(深入)”;

/*判断一*/if(strlen(x)>= strlen(y)){}/*判断二*/if(strlen(x)- strlen(y)>= 0){}

登录后复制

从表面上看,上面的两个判断表达式完全相等,但实际情况并非如此。其中,判断表达式一没什么问题,程序也能够完全按照预想的那样工作;但判断表达式二的结果就不一样了,它将永远是真,这是为什么呢?

原因很简单,因为函数 strlen 的返回结果是 size_t 类型(即无符号整型),而 size_t 类型绝不可能是负的。因此,语句“if(strlen(x)-strlen(y)>=0)”将永远为真。

同样,就算表达式中同时包含了有符号整数和无符号整数,还是有可能产生意想不到的结果,如下面的代码所示:

/*判断一*/if(strlen(x)>= 5){}/*判断二*/if(strlen(x)- 5>=0){}

登录后复制

很显然,判断表达式二的结果还是永远是真,其原因与上面相同。

关键字 sizeof 是一个单目运算符,而不是一个函数。与函数 strlen 不同,它的参数可以是数组、指针、类型、对象、函数等,如下面的示例代码所示:

char sArr[] = "ILOVEC";/*用sizeof求长度*/printf("sArr的长度=%d", sizeof(sArr));

登录后复制

相对于函数 strlen,这里的示例代码运行结果为 7(因为它包括结束字符 null)。同时,对 sizeof 而言,因为缓冲区已经用已知字符串进行了初始化,其长度是固定的,所以 sizeof 在编译时计算缓冲区的长度。也正是由于在编译时计算,因此 sizeof 不能用来返回动态分配的内存空间的大小。

相关推荐:C#.Net开发图文教程

以上就是C语言中sizeof和strlen的区别是什么的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2432482.html

(0)
上一篇 2025年3月3日 09:04:14
下一篇 2025年2月27日 07:25:21

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • c语言语句以什么结束

    c语言每条语句以都英文输入状态下的【;】结束一条语句,不同的版编权程语言有不同的结束标志,Java,C也是以【;】作为一行语句的结束的标志,也有不需要用【;】作为一行语句结束的编程语言。 【相关学习推荐:C语言教程视频】 c语言源程序的每一…

    2025年3月3日
    200
  • c语言中undeclared identifier是什么意思?

    “undeclared identifier”是指“未声明的标识符”,是C语言中一种报错提示;一般是使用的变量或者函数没有定义,或者是定义的时候和调用的时候不一致导致的。 本文操作环境:windows7系统、Dell G3电脑、C11。 “…

    2025年3月3日
    200
  • 复数型是c语言的数据类型吗?

    错,复数型不是c语言的数据类型。在C语言中,数据类型可分为基本数据类型、构造数据类型、指针类型、空类型4大类。其中基本类型:字符型、整型、实型(单精度型和双精度型)、枚举类型;构造类型:数组、结构体、公用体。 相关推荐:C语言视频教程 下列…

    2025年3月3日
    200
  • C语言中数组所占字节怎么算

    数组在内存中所占字节数可以使用sizeof操作符来计算,该操作符是专门用于检测类型或变量或数组在内存中所占有的空间(字节数);语法“sizeof(x)”,其中x是类型名、变量名或数组名等,可以返回x所占字节数。 本教程操作环境:window…

    2025年3月3日
    200
  • c语言绝对值怎么打

    c语言绝对值的实现方法:1、如果是整形数字,则可以使用abs函数得到其绝对值;2、如果是浮点型数字,则可是用fabs函数得到其绝对值。 本文操作环境:Windows7系统,Dev-C++ 5.11版本,Dell G3电脑。 c语言绝对值的实…

    2025年3月3日 编程技术
    200
  • c语言本身没有输入输出语句吗

    正确。C语言程序库内包含了printf和scanf这两个函数,当用户需要输入输出时,就要输入这两个函数,编译时C语言程序库则调用这两个函数,所以C语言本身是不能输入输出的。 本教程操作环境:windows7系统、c99版本、Dell G3电…

    2025年3月3日
    200
  • c语言程序从哪里开始执行

    一个C语言的执行是从本程序的main函数开始,到main函数结束;但需要注意的是,也是有特殊情况的,若是代码中出现了exit函数,则直接结束程序。 本教程操作环境:windows7系统、c99版本、Dell G3电脑。 c语言程序的执行总是…

    2025年3月3日
    200
  • 在c语言中引用数组元素时,其数组下标的数据类型允许是什么

    在c语言中引用数组元素时,其数组下标的数据类型允许是:整型常量或整型表达式。C语言规定只能逐个引用数组元素而不能一次引用整个数组,数据元素的表示形式为“数组名[下标]”,下标可以是整型常量或整型表达式。 本教程操作环境:windows7系统…

    2025年3月3日
    200
  • 在不同函数中可以使用相同名字的变量吗

    可以使用。C语言在函数中说明的变量为局部变量,只在函数内起作用,不会影响到其他函数。在不同函数中使用相同的变量名不代表是同一变量。 本教程操作环境:windows7系统、c99版本、Dell G3电脑。 在不同函数中可以使用相同名字的变量。…

    2025年3月3日
    200
  • 在c语言中char型数据在内存中的储存形式为什么

    在c语言中char型数据在内存中的储存形式为“ASCII码”。在C语言中,将一个字符常量放到一个字符变量中,实际并不是把该字符本身放到内存单元中,而是将与该字符相对应的ASCII码放到存储单元中。 本教程操作环境:windows7系统、c9…

    2025年3月3日
    200

发表回复

登录后才能评论