代碼:
int fun(char *a, char *b) {
while (*a != '\0' && *b != '\0' && *a == *b) {
a++; b++;
}
return (*a - *b);
}
while 條件:兩字串未結束 且 當前字符相等*a=='\0' 或 *b=='\0'):長度不同但前綴相同*a != *b):首個差異字符決定大小*a - *b:a > b (字典序後)a == ba < b (字典序前)// a = "1234", b = "125" i=0: '1'=='1' → a++,b++ i=1: '2'=='2' → a++,b++ i=2: '3'!='5' → 循環結束 return '3' - '5' = 51 - 53 = -2 (< 0) 結論: "1234" < "125" (字典序:'3' < '5')
// 標準實現本質相同
int strcmp(const char *s1, const char *s2) {
while (*s1 && (*s1 == *s2)) { s1++; s2++; }
return *(const unsigned char*)s1 - *(const unsigned char*)s2;
}
注意:標準庫轉為 unsigned char 再相減,避免 char 有符號溢出導致未定義行為。
qsort 配合比較函數)