关于C语言中strcmp的问题

来源:百度知道 编辑:UC知道 时间:2024/06/02 06:30:42
int strcmp(const char *strA,const char *strB){
assert((strA!=NULL)&& (strB !=NULL));
int i=0;
while(*strA!='\0' || *strB!='\0'){
if(*strA - *strB)--------------------------(1)
return *strA - *strB;-------------(2)
strA++;
strB++;
}
if(*strA == '\0')
return (int)*strB;----------------------(3)
else
return (int)*strA; ---------------------(4)
}

请问,第(1)和(2)行中,返回值的意义?
同样,第(3)(4)行中,如果返回的都是正数,怎么去判断到底是strA大还是strB大呢?
谢谢。

第(1)和(2)行中,返回值的意义是两字符串第一个不相同的字符ASCII码的差值,可能>0或<0
能运行到第(3)(4)行,说明它们有相等的可能,至少也是前辍关系,此时返回值大小是否大于0已经没有关系了,它们的大小应由 strlen 来判断
当然,也可以选择用 strncmp 来比较大小

因为循环条件是while(*strA!='\0' || *strB!='\0')
所以循环结束的时候
a.*strA==0的话,*strB可能为0,也可能不为0
b.*strA!=0的话,*strB一定为0
所以
(3)(int)*strB可能为0,可能大于0
(4)(int)*strA只能是大于0

问题是strA是strB的前缀的时候,返回strA大于strB,这个好像不对吧?