处理错误的文件输入名称。从argv以错误的名称读取i文件时,程序崩溃。 C程序设计

时间:2018-08-21 00:49:34

标签: c file

我试图弄清楚如何处理用户输入错误文件名的异常。我通过终端运行程序。如果我尝试在没有文件的情况下运行该程序,则该程序将按预期方式打印错误消息。但是,如果我运行该程序并输入错误的文件名,则会崩溃。关于我应该如何处理的任何建议?谢谢!

代码

FILE *file;

file = fopen(argv[1], "r");
if (argv[1] == NULL) {
    fprintf(stderr, "ERROR: No file input\n");
    exit(EXIT_FAILURE);
}

3 个答案:

答案 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