当intptr == NULL时我该怎么办?

时间:2013-03-10 02:40:53

标签: c

我正在修读计算机科学课程。每当我们使用以下代码打开文件时,我们都会被教导检查inptr是否为NULL:

//open dictionary
FILE* inptr = fopen(dictionary, "r");
if (inptr == NULL)
{
    fprintf(stderr, "Could not open dictionary.\n");
    return false;
}

问题在于我们还没有被教导如何应对它。因此,当我运行我的代码时,它会打印错误消息并返回false。我该怎么做才能解决问题?

5 个答案:

答案 0 :(得分:1)

要解决问题,找出然后在您已命名为#34; dictionary"

的参数中提供某个文件的有效路径 例如,尝试打开" /etc/groups" (假设您在UNIX计算机上运行)。

或者,更确切地说:

 FILE* inptr = fopen("/etc/groups", "r");

 char * pathToFile = "/etc/groups";
 FILE * inptr = fopen(pathToFile, "r");

编辑添加:

因为你说" dictionary"是一个指向路径的变量,将其打印出来然后看看是否可以" cd"到包含它的文件夹/目录。

e.g:

 printf( "path to my dictionary is %s", dictionary );
 FILE * inptr = fopen(dictionary, "r");

答案 1 :(得分:1)

要缩小错误范围,请始终使用perror()来解释操作系统返回的错误代码。

 FILE* inptr = fopen(dictionary, "r");
     if (inptr == NULL)
     {
         perror("Could not open dictionary.\n");
         return false;
     }

答案 2 :(得分:0)

如果您的程序文件和"字典"文件在同一目录中,然后您不需要提供路径,否则您必须提供您文件名的完整路径。

For e.g:- if your "dictionary" file is in /home/user_name/Documents then 
          FILE* inptr = fopen("/home/user_name/Documents/dictionary", "r");

还包括引号下的文件名(" / home / user_name / Documents / dictionary")

有关详细信息,这将有助于您

http://www.cplusplus.com/reference/cstdio/fopen/

答案 3 :(得分:0)

将错误消息更改为:

fprintf(stderr, "Could not open dictionary file '%s'.\n", dictionary);

这样可以提供更多信息。

收到此错误后,您更改a)检查变量dicationary是否符合您的要求b)如果是,请检查您可以访问它的shell(文件所有权/文件权限等)。< / p>

答案 4 :(得分:0)

关于在这种情况下该怎么做,没有“一个真正的答案”。这取决于您的背景和您的设计。这取决于你的程序是什么以及它应该如何工作。如果不了解更多信息,就无法回答您的问题。

例如,如果您的程序是交互式的,并且您传递给fopen的文件名是由用户以交互方式输入的,那么可行的做法是告诉用户该文件无法打开并且请他们重新输入文件名。

如果您的程序是某种“批处理”程序,它从某种用户 - 供应商配置文件中获取其参数,那么可行的方法是立即使用有意义的错误消息终止程序,即询问用户编辑配置文件重新运行程序。

如果您的程序是某种应该始终运行的服务器程序,那么您可能决定记录错误并继续尽可能地使用该文件。

当然,这一切也可能取决于该文件对程序操作的重要程度。如果这个文件是绝对必要的,你必须以致命错误终止或继续循环询问用户是否有正确的文件名。

如果文件是可选的,您可能会发出有关丢失文件的警告,并继续工作,假设某些默认配置和/或约定(否则将被丢失的文件覆盖)。

以上只是一些通用考虑因素。如果不了解更多关于你的程序,缺少的文件及其扮演的角色,就没有办法说出更具体的内容。