#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char a[] ="Hello World";
char b[] = "I want to go home";
printf("a的长度为:%d\n",strlen(a));
printf("b的长度为:%d\n",strlen(b));
if(strlen(a) - strlen(b) <= 0)
printf("a is shorter than b");
else
printf("a is longer than b");
return 0;
}
输出 a is longer than b
注意strlen 返回的是一个类型为size_t的值,这个类型是在头文件stddef.h定义的,是一个无符号整形,在表达式中使用无符号数可能会导致不可预料的后果,例如下面的 两个例子看上去是相等的;
if( strlen(x) >= strlen(y)) ……
if(strlen(x)-strlen(y) >= 0)……
事实上他们是不相等的,第一条按照你预想的那样工作,第二条语句将永远为真,strlen的结果是个无符号数,无符号数绝不可能是负数,第二条语句的左边也将是无符号数
表达式中如果同时包含了有符号数和无符号数,可能会产生一个奇怪的结果,
if(strlen(x)>=10)…
if(strlen(x)-10 >=0)…
两句返回的结果不一样的
/**
* 计算字符串参数的长度
*/
size_t
strlen(char const *string)
{
int length;
for(length=0;*string++ != '\0';)
length += 1;
return length;
}
摘自C和指针P176