在C語言中比較字串時,你會使用什麼呢?strcmp
是一個用來確認兩個字串是否相同的函數,就像是程式在問「這兩個字串一樣嗎?」。當然,程式無法判斷貓和狗哪個比較可愛,但至少能看出「HELLO」和「hello」的區別。在本文中,我們將講解 `strcmp` 的機制、使用方法以及容易出錯的地方。
1. 什麼是 strcmp 函數?
strcmp
函數會逐字元比較兩個字串,並回傳一個整數值作為結果。此函數的行為如下:
- 0: 字串相符時
- 正的值: 第一個字串在字典順序中較後面時
- 負的值: 第一個字串在字典順序中較前面時
此函數不僅能確認字串是否完全相同,也能判斷哪個字串在字典順序中較前面。在程式中,可以像下面這樣簡單使用:
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello";
char str2[] = "World";
int result = strcmp(str1, str2);
printf("strcmp 的結果: %dn", result);
return 0;
}
上述程式碼比較了 “Hello” 和 “World”,並顯示結果。重要的一點是,strcmp
會**區分大小寫**,因此 “HELLO” 和 “hello” 將被視為不同的字串。
2. strcmp 函數的運作原理
strcmp
的運作既簡單又強大。它會從第一個字元開始逐一比較兩個字串,並在發現不同字元時回傳它們之間的差值。這個機制也應用於字母順序的比較,例如比較 “apple” 和 “banana” 時,`strcmp` 會先比較 “a” 和 “b”,並回傳一個負值。
以下是進一步理解 `strcmp` 機制的程式範例:
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "apple";
char str2[] = "banana";
int result = strcmp(str1, str2);
if (result == 0) {
printf("字串相符。n");
} else if (result < 0) {
printf("str1 在 str2 之前。n");
} else {
printf("str1 在 str2 之後。n");
}
return 0;
}
這段程式碼比較了 “apple” 和 “banana”。結果顯示,strcmp
告訴我們 “apple” 在字典順序中位於 “banana” 之前。這使得在對字串進行字典順序排序時非常方便。

3. strcmp 函數的使用範例
1. 確認使用者輸入
strcmp
在比較使用者輸入的資料與現有資料時非常有用。例如,可用於確認密碼是否一致。
#include <stdio.h>
#include <string.h>
int main() {
char password[] = "secret";
char input[256];
printf("請輸入密碼: ");
scanf("%s", input);
if (strcmp(password, input) == 0) {
printf("密碼相符。n");
} else {
printf("密碼錯誤。n");
}
return 0;
}
這個程式使用 strcmp
比較輸入的密碼與正確的密碼。
2. 依字典順序排序
在依字典順序排列字串時,strcmp
也非常方便。在排序多個單字時,可以使用 strcmp
來判斷哪個單字應該排在前面。
4. strcmp 函數的替代方案
strcmp
雖然非常方便,但也應根據用途考慮使用其他函數。
strncmp: 比較部分字串
strncmp
用於只比較字串的一部分。例如,用於比較字串的前3個字元。
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "apple";
char str2[] = "apricot";
if (strncmp(str1, str2, 3) == 0) {
printf("前3個字元相符。n");
} else {
printf("前3個字元不相符。n");
}
return 0;
}
memcmp: 比較記憶體
memcmp
是一個用於比較整個記憶體區塊而非字串的函數。在需要比較二進位資料時非常有用。
5. 常見錯誤
1. 未考慮大小寫差異
strcmp
會區分大小寫。例如,”HELLO” 和 “hello” 將被視為不同的字串。如果需要進行不區分大小寫的比較,請考慮使用 strcasecmp
。
2. 比較 NULL 指標
使用 strcmp
比較 NULL 指標會導致程式崩潰。確認比較的字串已正確初始化非常重要。
總結
strcmp
在C語言中是一個非常重要的函數,可以輕鬆進行字串比較。我們透過密碼確認、字串排序等實際程式使用範例進行了說明。在程式中的字串操作中,請務必體驗這個函數的便利性。