私は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");
}
}
これがなぜなのか理解できないようです。どんな助けでも素晴らしいでしょう!