2011-04-27 185 views
2

可能重複:
C String — Using Equality Operator == for comparing two strings for equalityC字符串比較失敗?

我有以下代碼;

#include <stdio.h> 
#define MAXLINE 2600 
char words[4][MAXLINE]; 
int i; 

int main(){ 

    printf("Enter menu option: "); 

    scanf("%s", words[i]); 

    printf ("\n %s was entered!", words[i]); 

    if (words[i]=="help"){ 
     printf("\nHelp was requested"); 
    } 
    else 
    { 
     printf("\nCommand not recognized!"); 
    } 

} 

if語句中的數組求值不起作用。我顯然做錯了什麼。有人可以向我解釋什麼?

+1

不是答案,但請在使用前初始化'i'。 – 2011-04-27 02:44:05

+0

亞倫你好。歡迎來到Stack Overflow。非常感謝你在你的問題中包含一個完整的,可編譯的程序。我重新格式化了您的問題,以便代碼正確顯示。將來,請自己去做:突出顯示您的代碼並使用'{}'按鈕將其包含在代碼塊中。再次歡迎。我希望你在這裏提出並回答很多問題。 – 2011-04-27 02:44:15

+0

@Jacob:因爲'i'是「全局」,所以它被初始化爲0. – 2011-04-27 03:04:05

回答

5

您正在比較words[i]"help"指針相等,而不是字符串相等。我認爲你的意思是:if (strcmp(words[i], "help") == 0) {

+2

記住'=='比較所有東西,就好像它是一個整數。如果你拋出指針,它會以數學方式比較它們:兩個結構可以在語義上相等,但是如果你比較指向它們的指針,它們將會不同。 – slezica 2011-04-27 02:44:49

0

在C中,字符串(字符序列)被視爲字符數組。因此,您不應使用==運算符比較陣列。

陣列大括號[]只是語法糖來隱藏引擎蓋下正在進行的指針運算。通常,arr[i]*(arr + i)相同。利用這些信息,讓我們來看看你的比較:

words[i] - >*(words + i),這是一個指針到字符數組。

如果要比較字符串,請使用strncmp

+0

有些語言可以將字符數組與'=='進行比較。問題在於字符串和數組不是C中的第一類對象(只知道C的人,或者只知道較少原語的人,由於相反的原因可能會被該語句困惑),所以它們被轉換爲它們的地址(在非C程序員中可能沒有意義的概念)在表達式中使用時。 'strcmp'通常用於字符串比較,在這裏也適用。 – 2011-04-27 03:01:06