我知道这个错误意味着什么,但我看不出我在这里做错了什么。我实现了一个删除文件和目录的函数,我还想为“rm”命令实现“-i”功能。使用的命令:rm -i filename。
我被问到是否要将其删除,我输入“y”,我要删除的文件被删除,但程序崩溃后我不知道原因。
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;
}
答案 0 :(得分:0)
如果用户只能输入scanf("%c",&ch);
或y
,为什么不尝试n
作为答案,但是如果您想支持yes
或{{ 1}}您可以编写以下代码:
no
正如其他人在某些情况下指出的那样scanf("%1,3s",ans); /* Points out that the minimum length is 1 and the maximum length is 3 */
函数应该返回cmd_rm()
或任何其他值来表示删除文件成功。但是,我无法在您的函数1
中看到任何成功案例,如果您附上cmd_rm()
函数会更好。
但通常trim
是因为指针没有指向正确的位置(棘手的指针)。调试器可以很方便地找到这些指针。