字符串就是一串0个或多个字符,并且以一个位模式全为0的NUL字节结尾。因此,字符串所包含的字符内部不能出现NUL字节。
字符串的长度即它所包含的字符个数(NUL字节除外),标准库函数strlen的原型如下:
size_t strlen(char const* string )
注意,该函数返回一个类型为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).....
当然,如果把strlen的返回值强制转换为int,就可以消除这个问题。