我正在制作一个 C 程序。我有一个功能,一切似乎都很好。但是,如果我向其中添加另一个变量,它突然不起作用,并且出现分段错误。(如果我使用 gdb,我会收到错误:单步执行直到从函数 __svfscanf_l 退出,它没有行号信息。程序接收到的信号:“EXC_BAD_ACCESS”。)
这是我的功能:
void condition(char *command) {
printf("CAMMAND: %s\n", command);
char *cond;
char *expression;
char *file;
char *buffer;
buffer = malloc(200 * sizeof(char));
sscanf(command, "%s ( %s %s ) %[^\n]", cond, expression, file, buffer);
printf("COND: %s\n", cond);
printf("EX: %s\n", expression);
printf("File: %s\n", file);
printf("Command: %s\n", buffer);
if (!strcmp(expression, "checke")) {
printf("CHECK EXISTS\n");
if (file_exists(file)) {
printf("EXISTS\n");
}
} else if (!strcmp(expression, "checkd")) {
printf("CHECK DIR\n");
} else if (!strcmp(expression, "checkr")) {
printf("READ\n");
} else if (!strcmp(expression, "checkw")) {
printf("CHECK WRITE\n");
} else if (!strcmp(expression, "checkx")) {
printf("CHECK EX\n");
} else {
printf("NOOOO\n");
}
}
但是,如果我什至将其更改为如下所示的内容,则会出现错误。sscanf 调用似乎失败了。但是当我不添加一些变量时,这很有效。
void condition(char *command) {
int flag;
printf("CAMMAND: %s\n", command);
char *cond;
char *expression;
char *file;
char *buffer;
buffer = malloc(200 * sizeof(char));
sscanf(command, "%s ( %s %s ) %[^\n]", cond, expression, file, buffer);
printf("COND: %s\n", cond);
printf("EX: %s\n", expression);
printf("File: %s\n", file);
printf("Command: %s\n", buffer);
if (!strcmp(expression, "checke")) {
printf("CHECK EXISTS\n");
if (file_exists(file)) {
printf("EXISTS\n");
}
} else if (!strcmp(expression, "checkd")) {
printf("CHECK DIR\n");
} else if (!strcmp(expression, "checkr")) {
printf("READ\n");
} else if (!strcmp(expression, "checkw")) {
printf("CHECK WRITE\n");
} else if (!strcmp(expression, "checkx")) {
printf("CHECK EX\n");
} else {
printf("NOOOO\n");
}
}
似乎无法弄清楚这是为什么。任何帮助都会很棒!