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;
}
答案 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>
,因此编译器会显示错误。否则始终在启用所有警告的情况下进行编译,并阅读编译器显示的警告。