库函数strlen()
#include<stdio.h>
#include<string.h>
int main()
{
if(strlen("abc")-strlen("abcdef") >= 0)
{
printf(">\n");
}
else
{
printf("<\n");
}
return 0;
}
库函数strlen()的返回值类型是size_t -> unsigned int
无符号整型的3 减去 无符号整型的6 得到的-3也是无符号整型的
10000000000000000000000000000011 -3的原码
111111111111111111111111111111111100
111111111111111111111111111111111101 补码
将其看成无符号整型是一个非常大的正整数 if条件成立
模拟实现的strlen()
#include<stdio.h>
#include<assert.h>
int my_strlen(const char* str)
{
assert(str);
int count = 0;
while(*str)
{
str++;
count++;
}
return count;
}
int main()
{
if(my_strlen("abc")-my_strlen("abcdef") >= 0)
{
printf(">\n");
}
else
{
printf("<\n");
}
return 0;
}
模拟实现的strlen()返回值是有符号整型,所以打印<。
不管是库函数strlen()还是模拟实现的,都各有利弊,
重要的是懂得如何去使用。