我试图弄清楚如何处理用户输入错误文件名的异常。我通过终端运行程序。如果我尝试在没有文件的情况下运行该程序,则该程序将按预期方式打印错误消息。但是,如果我运行该程序并输入错误的文件名,则会崩溃。关于我应该如何处理的任何建议?谢谢!
代码
FILE *file;
file = fopen(argv[1], "r");
if (argv[1] == NULL) {
fprintf(stderr, "ERROR: No file input\n");
exit(EXIT_FAILURE);
}
答案 0 :(得分:1)
argv[1] == NULL
仅测试argv[1]
存在/不存在NULL
,而不是它包含有效的可读文件的名称。幸运的是,fopen
调用确实可以进行检查。如果在调用file == NULL
之后fopen
,则fopen
由于任何原因而失败;一种可能的原因是该文件不存在。
此外,要测试argv
中是否存在命令行参数,您可以只使用argc
的值:
if(argc < 2) // No filename supplied
{
fprintf(stderr, "Usage: myprog filename\n");
exit(EXIT_FAILURE);
}
file = fopen(argv[1], "r");
if(file == NULL) // Filename supplied but fopen failed
{
fprintf(stderr, "Could not open \'%s\'", argv[1]);
exit(EXIT_FAILURE);
}
答案 1 :(得分:0)
在打开文件之前尝试执行if语句
FILE *file;
if (argv[1] == NULL) {
fprintf(stderr, "ERROR: No file input\n");
exit(EXIT_FAILURE);
}
file = fopen(argv[1], "r");
答案 2 :(得分:0)
带有fopen函数返回的句柄 如果为null,则打印文件不存在或用户指定的文件名错误 否则将打开文件
每当您以读取模式打开文件时,它都会检查文件是否存在 如果不存在,则返回null
现在可以为用户提供更好的信息,因为他错过了输入文件名或输入错误的文件名
首先检查命令行文件输入,如果没有输入文件名,则为空打印消息
在那之后检查您的fopen函数返回什么,如果返回空则打印无效的文件名
if(argv[1]==Null)
printf("File Name not entered")
else
fp=fopen(argv[1],"r");
if(fp==Null)
print("wrong file name given");
else
do all your operations