首页 文章

Fopen无法从命令行读取

提问于
浏览
-1

Fopen return NULL based on

'fopen' return a NULL

现在我有一个文件要读取,我想在控制台上输出,但它会抛出一个错误,因为fp返回NULL这里是一个片段

#include<stdio.h>

int main(char argc,char **argv)
{
      if(argc < 2)
      {
            printf("Usage:\t");
            printf("Hash File path");
      }

      printf("Hash File  : %s\n", argv[1]);
      FILE *fp = fopen("argv[1]","r");
      if(fp == NULL)
      {            
            fprintf(stderr,"Can't open %s\n", argv[1]);
      }
      else
      {
           char buff[100];
           while(!feof(fp))
           {
                if(fgets(buff,100,fp) == NULL) break;
                fputs(buff,stdout);
           }
            fclose(fp);
      }
      return 0;
}

whenever I pass file Path E:\design\test.txt from the command line it always shows error report "Can't open...." like this

所以困惑是

why Fopen Failed to read from Command line?

1 回答

  • 2

    代码中几乎没有问题 . 首先,这个

    FILE *fp = fopen("argv[1]","r");
    

    是错的 . fopen() 的第一个参数应该只是 argv[1] 而不是 "argv[1]" . 例如

    FILE *fp = fopen(argv[1],"r");
    if(fp == NULL) {            
         fprintf(stderr,"Can't open %s\n", argv[1]);
         return 0; /* this you forgot, if fopen fails,then no need to proceed further */
    }
    

    此外,如果 argc<2 为真,那么仅仅写入 printf() 是不够的,您必须要求用户提供正确的命令行输入并且不要让用户继续进行 . 它应该是

    if(argc < 2) {
          printf("Usage:\t");
          printf("Hash File path");
          return 0; /* return from here or use exit(0) */
     }
    

    其次,阅读here为什么 feof() 是错误的 . 你可以像使用它一样

    while(fgets(buff,100,fp) != NULL) { /* no need to use break */
            fputs(buff,stdout); 
    }
    

    代替

    while(!feof(fp))
    {
            if(fgets(buff,100,fp) == NULL) break;
            fputs(buff,stdout);
    }
    

相关问题