与 malloc 数组比较时 strcmp 崩溃

strcmp crashes when comparing with a malloc array

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;
}

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

您的编译器应该已经就此向您发出警告。

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

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

strcmp(line[0], ... 是错误的。使用 strcmp(line, ...).

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

在您的代码中,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");