2012-10-23 107 views
1

當我嘗試比較一個指針數組(最初是NULL)和字符指針:指針和整數警告的比較

int main(int argc, char **argv){ 

    char **list = (char**)malloc(20*sizeof(char)+1); 
    char *input = "La li lu le lo"; 


    if(*list[0] != input[0]) { //or if(list[0][0]!=input[0]) 
     printf("false: %s", strdict[0]); 
    } 
} 

我不斷得到一個警告:

指針和之間的比較整數

必須做些什麼來消除此警告? 如果我修改爲:

if(*list[0] != input[0]) 

警告被刪除,但該程序崩潰。 感謝您的幫助提前。

+0

定義「無法運行」。它不編譯?它崩潰?它說「假:......」? – LSerni

+0

好吧,1)刪除malloc'cast'並關閉你正在比較'char *'list [0]和'char' input [0]的'('。2)。在C中無效;你需要做'list [0] [0]!= input [0]'3)'list'未初始化 – Jack

+1

那麼它肯定不會編譯。失蹤 」;」和一個不應該在那裏的大括號:P –

回答

3

看起來好像你正在比較一個整數到一個數組,因爲List之前有兩顆星。輸入[0]是一個字符,而列表[0]是一個數組,如果你看着List [0] [0],那麼你會比較兩個等價的對象。

5

input[0]的類型是char,而類型list[0]char*。如果你想比較字符串使用strcmp()

但是malloc()不正確,並且list內容未初始化。我認爲的基礎上,它的名稱和類型,list旨在成爲char*列表:

/* No need to cast return value of malloc(). */ 
char **list = malloc(20 * sizeof(char*)); 

然後每個元素是char*和需要設置一些char*,可能malloc()也D:

list[0] = malloc(20); 
/* Populate list[0] with some characters. */ 

/* Compare to input. */ 
if (0 == strcmp(list[0], input)) 
{ 
    /* Strings equal. */ 
} 
+0

如果我只能提出另一個upvote來提及malloc()不需要cast – Fingolfin

相關問題