指针和整数警告之间的比较

时间:2012-10-23 15:36:31

标签: c

当我尝试比较指针数组(最初为NULL)和char指针时:

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])

警告已删除,但程序崩溃了。 感谢您的帮助。

2 个答案:

答案 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. */
}

答案 1 :(得分:3)

看起来您正在将整数与数组进行比较,因为List之前有两颗星。输入[0]是一个char而List [0]是一个数组,如果你查看List [0] [0],那么你将比较两个等价的对象。