首页后端开发其他后端知识C语言的sizeof和strlen的用法是什么,有何不同

C语言的sizeof和strlen的用法是什么,有何不同

时间2024-03-24 03:12:03发布访客分类其他后端知识浏览624
导读:这篇文章主要给大家介绍“C语言的sizeof和strlen的用法是什么,有何不同”的相关知识,下文通过实际案例向大家展示操作过程,内容简单清晰,易于学习,有这方面学习需要的朋友可以参考,希望这篇“C语言的sizeof和strlen的用法是什...
这篇文章主要给大家介绍“C语言的sizeof和strlen的用法是什么,有何不同”的相关知识,下文通过实际案例向大家展示操作过程,内容简单清晰,易于学习,有这方面学习需要的朋友可以参考,希望这篇“C语言的sizeof和strlen的用法是什么,有何不同”文章能对大家有所帮助。


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

区别分析:

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

size_t strlen(char const* str);
    

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

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

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

/*判断一*/
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\n", sizeof(sArr));
    

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



到此这篇关于“C语言的sizeof和strlen的用法是什么,有何不同”的文章就介绍到这了,感谢各位的阅读,更多相关C语言的sizeof和strlen的用法是什么,有何不同内容,欢迎关注网络资讯频道,小编将为大家输出更多高质量的实用文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: C语言的sizeof和strlen的用法是什么,有何不同
本文地址: https://pptw.com/jishu/651781.html
用命令行进入mysql的方法是什么 continue语句有何用,c语言中怎么应用的

游客 回复需填写必要信息