C语言中strlen和sizeof

廉价感情. 提交于 2019-11-28 09:28:59

定义
sizeof是C/C++中的一个运算符(关键字),计算对象或者类型在内存中所占用的字节数。
strlen是C语言中的库函数,计算字符串长度,不包括尾0。
引用头文件#include<stdio.h>。
库函数原型:size_t strlen(const char *s)
注:sizeof是关键字,不是函数。strlen是函数。

举例
char test[20] = “hello”;
char *test1 = “hello!”;
char test2[] = “hello!!”;

strlen(test) //5 strlen计算的是字符串的实际长度,不包括尾0,以第一个’\0’为结束符。
sizeof(test) //20 定义的char型数组,占用了20个字节。
strlen(test1) //6 trlen计算的是字符串的实际长度,不包括尾0,以第一个’\0’为结束符。
sizeof(test1) // 8 计算了指针类型所在的字节数,取决于32/64位机,32位占4字节,64位占8字节。
strlen(test2) //7 strlen计算的是字符串的实际长度,不包括尾0,以第一个’\0’为结束符。
sizeof(test2) // 8 定义的char型数组,占用了8个字节,其中包括了’\0’为结束符。

strlen的返回值为unsigned int类型,为无符号。
1.if( strlen(test) >= strlen(test2) )
2.if (strlen(test) - strlen(test2) >= 0 )
3.if( strlen(test) >= 2 )
4.if (strlen(test) - 10>= 0 )
两个表达式看起来是一样的效果。第1,3个表达式写法正确,第2,4个表达式因为strlen的返回值为unsigned int类型,为无符号,所以表达式永远为真。
如果把strlen的返回值强制转换为int,就可以消除上面这个问题。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!