Я знаю, что означает эта ошибка, но я не вижу, что я сделал не так. Я реализовал функцию для удаления файлов и каталогов, а также хочу реализовать «-i» для команды «rm». Используемая команда: rm -i filename.Сбой приложений с ошибкой сегментации
Меня спрашивают, хочу ли я удалить его, я набираю «y», файл, который я хочу удалить, получает deteleted, но программа падает после этого, и я не знаю почему.
int has_args(char * argv[], char arg[])
{
int i = 0;
while(argv[i] != NULL) {
if(strcmp(argv[i], arg) == 0) {
return 1;
}
i++;
}
return 0;
}
void print_error(char *this, char *filename)
{
fprintf(stderr, "%s: Could not delete file: %s;\n%s\n", this, filename, strerror(errno));
}
int cmd_rm(int argc, char *argv[])
{
errno = 0;
if(argc > 1) {
if(has_args(argv, "-r")) {
remove_directory(argv[2]);
}
else if(has_args(argv, "-i")) {
char ans[2];
fprintf(stdout, "Delete file: '%s'?\n", argv[2]);
scanf("%s", ans);
trim(ans);
if((ans[0] == 'Y') || (ans[0] == 'y')) {
if(remove(argv[2])) {
print_error(argv[0], argv[2]);
}
}
}
else {
if(remove(argv[1])) {
print_error(argv[0], argv[1]);
}
}
}
else {
puts("ERROR: ");
print_usage(argv[0]);
}
return 0;
}
Что такое 'has_args()'? И почему вы предполагаете, что второй аргумент - '-i', а не первый? –
Потому что -i всегда будет вторым аргументом. Первый будет «rm», второй будет «-i», а третий будет файлом, который я хочу удалить. –
Но вы не можете гарантировать это, и если это всегда будет, нет никакого смысла в проверке. То, что вы делаете, не имеет смысла. Просто перейдите в массив 'argv' и проверьте, какой вариант он есть. –