库函数strlen源码重现及注意问题
首先直接上源码:
size_t strlen (const char * str) { const char *eos = str; while(*eos++); return(eos - str - 1); }
可以看到strlen是利用一个新的char*指针,一直向后遍历,找到字符串结尾的\0,的下一个元素。然后计算距离。
但是这里注意一点 size_t 其实是 unsigned int 类型的。所以比较两个字符串长度大小的时候不能使用 strlen(a) - strlen(b) 。因为两个无符号的整型相减是得不到一个负数的,所以不管怎么样得到的结果都是一个整数。也就是strlen(a)永远大于strlen(b)。
可以使用 strlen(a) > strlen(b) 这个表达式判断两个字符串的大小,不能使用 strlen(a) - strlen(b) > 0