c - 将文件名打印到标准输出



我想运行一个程序,并允许用户在同一行上输入。我检查文件是否存在,如果不存在,请打印

文件

: 没有这样的文件或目录

    FILE* filename;
    filename = fopen(argv[2], "wb");
        //validate file name
        if(!filename) {
            perror(filename);
            return EXIT_FAILURE;
        }

编译时,我收到以下警告:

预期的"const char *",但参数的类型是"结构文件 *"

在上面的代码中,filename 是一个FILE *,而不是带有文件名的字符串。 由于argv[2]似乎是文件名,您可以尝试:

        if(!filename) {
            perror(argv[2]);
            return EXIT_FAILURE;
        }

。但是您应该首先检查是否已设置argv[2](该argc > 2)。

代码需要打印文件名,而不是具有NULL值的FILE *

在没有额外检查的情况下打印无法打开的文件的名称是不明智的。 用引号或其他东西打印名称也很好,以帮助划分麻烦文件名的开头和结尾。

OP 的原始"文件名"是文件变量名称的弱选择,因为变量不是文件名。 建议类似"output_file"的内容。 argv[2]是文件名。

const char *filename = argv[2];
FILE* output_file;
output_file = fopen(filename, "wb");
//validate file pointer
if(!output_file) {
   perror("Unable to open file for writing.");
   if (argc > 2 && filename) {
     fprintf(stderr, ""%s"n", filename);
   }
   return EXIT_FAILURE;
}
   FILE* filename;
    filename = fopen(argv[2], "wb");
        //validate file name
        if(!filename) {
            fprintf(STDERR,"%s", filename);
            perror(" files to open: ");
        }

perror 打印错误消息,后跟最后一个错误的字符串表示形式;

在此

行:

perror(filename);

引用指向文件描述符的指针不是指向字符字符串的指针。

建议使用:

perror(argv[2]);

顺便说一句:perror() 输出到 stderr,而不是 stdout

相关内容

  • 没有找到相关文章

最新更新