【问题标题】:Error checking fopen from argv[i] in C从 C 中的 argv[i] 检查 fopen 时出错
【发布时间】:2012-04-17 22:54:25
【问题描述】:

我一直在尝试对我的代码进行错误检查,以确保给定的参数是有效文件。以下代码:

int main(int argc, char *argv[]){
    for(int i = 1, i <=argc, i++){
         FILE *fileIn = fopen(argv[i],"r");
         if(fileIn == NULL){
                fprintf(stderr,"The file %s doesn't exist.",fileIn);
         }
         else if (fileIn != NULL){
             do a bunch of stuff, including printing out values from a struct
         }

我遇到的问题是,当我运行我的程序时,我得到了这个输出:

The (null) file doesn't exist
Output from else if loop

所以基本上,它是说 fileIn 为 null 并且同时不为 null。它正在正常读取文件并按应有的方式进行操作,但每次都会遇到错误。有没有办法将指针分配给 argv[i 或其他东西?这是怎么回事?

【问题讨论】:

    标签: c file if-statement error-handling null


    【解决方案1】:

    代码循环了太多次。 &lt;= argc 正在评估比实际存在的参数多一个。应该是:

    for(int i = 1, i < argc, i++){
    

    另外,不存在的文件的 printf 应该如下(它需要名称):

    fprintf(stderr,"The file %s doesn't exist.",argv[i]);
    

    【讨论】:

      【解决方案2】:

      改变不等式

      for(int i = 1, i <=argc, i++){
      

      for(int i = 1, i < argc, i++){
      

      如果argc 是2,那么

      argv[0] = 程序名称
      argv[1] = 第一个参数

      另外,由于您正在检查if (fileIn == NULL),因此您无需再次检查;只需使用else

      【讨论】:

      • 非常感谢,我会尝试一下,看看它是否有效。另外,我只是将条件 else 放在那里进行测试,我最初将它作为 else 并只是想看看这是否可能是它倾倒到两者中的原因。
      猜你喜欢
      • 2012-11-16
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      • 2013-10-22
      • 1970-01-01
      相关资源
      最近更新 更多