- 论坛徽章:
- 0
|
诸如strlen(),strcmp()等字符处理函数是经常用到的。对它们源码的分析 可以很大的提高自己的编程水平。我在分析这些函数时遇到了几个不明白的地方,想和大家讨论一下。
1。 int strlen( const char string ) //计算字符串的长度
{
int i = 0;
while(string) i++;
return i ;
}
Q: 参数string明明是个 char ,但在while 中 为什么就成了数组string)了 (我推断: 也许函数中的参数忘写了 指针符号 *,但我没有找到别的出处来校对)?
2. int streql( char* str1, char* str2) //判断两个字符串是否相等
{
while((*str1==*str2)&&(*str1))
{
str1++;
str2++ ;
}
return ( (*str1 ==NULL)&&(*str2 ==NULL) )
}
Q: 返回语句(return)中的 表达是式怎么解释?
3。 int strcmp(const char* str1, const char* str2)//判断俩个串大小
{
while ((*str1 == *str2)&&(*str1))
{
str1++;
str2++;
}
if ((*str1 ==*str2)&&(!*str1)) //same strings
return 0;
else if ((*str1 )&&(! * str2)) // same but str1 longer
return - 1;
else if ((*str2)&&(!* str1)) // same but str2 longer
else
return ((*str1>;*str2)?-1:1);
}
Q:
串1str1和串2str2比校大小(return(*str1 >;*str2))不能理解。为什么要靠指针的值去比较串的大小呢? 而且两个串相等后,怎么还会出现str1 longer ( or str2 longer) 的 情况呢?
另外 不知怎么才能得到更多的库函数的源代码?到那去找那? |
|