[英]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。
您可以使用perror
或strerrror
來打印錯誤消息。
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.