先看下面几个例子:
/* 定义数据 */
...
char *msg1 = "testtest";
char *msg2 = "test";
int len = 20, t = 1;
...
1-----> if( strlen(msg2) >= strlen(msg1) )... //right
2-----> if( strlen(msg2) - strlen(msg1) >= 0 )... //"error"
3-----> if( strlen(msg2) >= 10 ).... //right
4-----> if( strlen(msg2) - 10 >= 0 ).... //"error"
5-----> if( strlen(msg2) - len >= 0 )... //"error"
6-----> if( t - strlen(msg2) >= 0 )... //"error"
7-----> if( t >= strlen(msg2) )... //right
我们这里所说的"error"不是说语法上出错。语法上都没错,编译运行也都能通过。这里的"error"指的是:这条语句无法按照你预想的那样工作。2,4,5,6这四条语句的结果将永远是真。
为什么呢?
我们先看库函数 strlen 的原型吧:
size_t strlen( char const *string );
注意strlen返回一个类型为size_t的值。那么size_t是什么