与 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");
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");