与malloc数组进行比较时,strcmp崩溃了

时间:2016-02-24 14:00:33

标签: c strcmp

strcmp会导致程序崩溃,为什么会这样? 删除strcmp时,它运行良好,并且使用strcpy使其崩溃

size_t maxLineLen=1024;
char *line = (char*)malloc(maxLineLen);
while(getline(&line, &maxLineLen,stdin)!= -1){
int h =strlen(line);
for (int i = 0; i < h; i++){
             if(strcmp(line[0], "a") == 0)  {
        printf("a found  %c \n ",line[i]);
            break;
        }

    }

}
return 0;
}

3 个答案:

答案 0 :(得分:2)

strcmp函数需要char *作为第一个参数,但您传递char。与strcpy类似。这导致了未定义的行为。

你的编译器应该给你一个警告。

如果您要尝试做的是查看字符串中的给定字符是否为a,您可以这样做:

if (line[i] == 'a')

答案 1 :(得分:2)

在代码line中是指向字符的指针。 strcmp指向要比较的字符,但这里

if(strcmp(line[0], "a") == 0)
//        ^^^^^^^^

你传递的是角色,而不是指向它的指针。

解决方案:

if(strcmp(line, "a") == 0)
// ...

if(line[0] == 'a')
// ...

旁注:there is no need to cast returned value of malloc。但是你应该检查它是否有错误:

char *line;
line = malloc(maxLineLen);
if (line == NULL)
    perror("oh dear! Go on holidays.\n");

答案 2 :(得分:1)

strcmp(line[0], ...错了。使用strcmp(line, ...)

您应该#include <string.h>,因此编译器会显示错误。否则始终在启用所有警告的情况下进行编译,并阅读编译器显示的警告。