簡體   English   中英

從命令行運行程序時,fopen() 返回 NULL

[英]fopen() returns NULL while running program from Comand Line

我使用 fopen() 的任何 C 程序都可以在 IDE 或 Windows 環境中完美運行,但從命令行 (cmd.exe) 打開時會失敗,因為 fopen("r") 不斷返回 NULL 指針。 這些文件確實存在並且沒有權限限制。 所以程序確實是從命令行運行的,但是一旦在代碼中遇到 fopen() 就會出現錯誤(空指針)。

int main(int argc, char *argv[])
 {
  FILE *fr, *fw;
  int j;

  if(argc==1)
   {
     vypis_navodu(argv[0]); // function call
   }

  if(argc==2)
   {     
      if ((fr=fopen(argv[1], "r")) == NULL) // returns NULL from CMD 
          {
           printf("\nunable to open %s\n", argv[1]); 
           return 1;    
          }

使用完整文件路徑的解決方案:

int main(int argc, char *argv[])
{
FILE *fr, *fw;
char path[100] = "C:\\folder\\"; // path to the folder
int j;

if(argc==1)
 {
  vypis_navodu(argv[0]);
 }


if(argc==2)
 {   
    if ((fr=fopen(strcat(path, argv[1]), "r")) == NULL) // works o.k.
      {
        printf("\nunable to open %s\n", argv[1]);
        return 1;   
      }

從手冊頁:

fopen()、fdopen() 和 freopen() 函數也可能會失敗並為例程 malloc(3) 指定的任何錯誤設置 errno。

fopen() function 也可能會失敗並為例程 open(2) 指定的任何錯誤設置 errno。

您可以使用perrorstrerrror來打印錯誤消息。

perror() function 在標准錯誤上生成一條消息,描述在調用系統或庫 function 期間遇到的最后一個錯誤。

這是一個例子:

#include <errno.h>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[]) 
{
    /* argument checking here... */

    FILE *fp;

    errno = 0;
    fp = fopen(argv[1]), "r");
    if (!fp) {
        perror("fopen");
        return EXIT_FAILURE;
    }
    return EXIT_SUCCESS;
}


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM