为什么在检查 NULL 条件时出现 FILE 指针错误?

Why do I get FILE pointer error while checking NULL condition?

提问人:Anil 提问时间:11/11/2021 更新时间:11/11/2021 访问量:62

问:

#include<stdio.h>
#include <string.h>
#include <windows.h>

#define PATH "F:\\c\\projects\\Banking Management System\\data\\"
#define F_PWD "pwd.txt"

#define FILENAME(q1, path, f_)  q1 path f_ q1

void main() {
    printf("\n%s", FILENAME("\"",PATH, F_PWD));

    FILE *fp=fopen(FILENAME("\"",PATH, F_PWD), "w");

    if (fp==NULL){
        perror("\nERROR: ");
        exit(EXIT_FAILURE);
    }

    fprintf(fp,"%d,%s,%f\n",1,"Anil Dhar",1000.00);
    fclose(fp);
}

问题

  1. printf 显示正确的文件名和路径: “F:\c\projects\Banking Management System\data\pwd.txt”

  2. 但是,perror 显示: 错误:参数无效

  3. 它不会创建/写入文件,即使我删除了以下条件:

    如果 (fp==NULL){ perror(“\n错误:”); 退出(EXIT_FAILURE); }

为什么 perror 显示“无效参数”?

C GCC 代码块 预处理器指令 文件指针

评论


答:

1赞 dbush 11/11/2021 #1

文件名不用引号括起来。您只需在从命令提示符调用文件以转义并在文件名中使用空格即可。

因此,从宏中取出引号:

#define FILENAME(path, f_)  path f_
...
printf("\n%s", FILENAME(PATH, F_PWD));

评论

0赞 Anil 11/11/2021
事实上。删除引号就成功了。谢谢。