2013-02-08 62 views
0

我在比較C中的兩個字符串以查看它們是否相等時遇到問題。如何在C條件下比較字符串

switch(i) { 
case 1: 
    printf("Got in case 1. TextA=%s word=%s \n",TextA,word); 
    if(TextA == word) {  
    SubTypeOption = 1; 
    printf("SubTypeOptioon = %d",SubTypeOption); 
    } 

在我的輸出,我得到 「了的情況下,1 TEXTA = SupTypeA字= SupTypeA SubTypeOption = 0」 //所以這不是莫名其妙地改變

+0

strcmp()函數 – Arpit 2013-02-08 18:36:22

+0

謝謝大家,它似乎現在工作。 – user2055216 2013-02-08 19:23:16

回答

6

==運算符比較指針。它只有在兩個char*指向內存中的相同地址時纔會成功。比較字符串內容在C要求的strcmpstrncmp呼叫:

if (strcmp(TextA, word) == 0) { 
    // Strings are identical 
} 

注意比較爲零:這是必需的,因爲strcmp功能比較字符串字典順序,返回零當字符串相等。您需要包含<strings.h>才能使用strcmp

1

您不能使用==符號比較字符串,因爲您正在比較它們是否放置在相同的內存位置。 TextAword是指向每個c字符串的第一個字符的指針。

使用strcmp()strlcmp()函數來比較字符串。他們會返回0,如果兩個字符串相等

#define STREQ(a,b) (strcmp((a),(b))==0) 
if (STREQ(TextA, word)){ 

} 
1

簡單 - 使用strcmp - 這是你需要的功能。

1

你不能比較字符串與標準的關係運算符的內容(或任何其他數組類型)像==<>,等你將需要使用strcmp庫函數,而不是:

#include <string.h> 
... 
if (strcmp(TextA, word) == 0) 
{ 
    // strings are equal 
} 

strcmp將返回一個整數值< 0,如果是TextA lexicogra小於word,如果它們按字典順序相等則爲0,如果TextA按字典順序大於word則大於0。請注意,在C語言環境中,這意味着字符串將被命令爲「ASCIIbetically」。即以'a'開頭的任何字符串都會以'Z'開頭的字符串出現,因爲'a'的ASCII碼大於'Z'

那麼爲什麼你不能使用==比較字符串?

除了當它是的sizeof_Alignof操作數,或一元&運營商,或者是字面被用於初始化的聲明的陣列,類型「的T N元件陣列」的表達式的字符串將是轉換成類型爲「指向T的指針」的表達式,其值將是數組第一個元素的地址。

這意味着,在條件TextA == word中,表達式TextAword都被轉換爲指針值;而不是比較兩個數組的內容,我們正在比較他們的地址。