如何读取文件并在c中打印

Posted

技术标签:

【中文标题】如何读取文件并在c中打印【英文标题】:How to read a file and print it in c 【发布时间】:2021-12-26 12:47:12 【问题描述】:

我正在尝试读取我附加的文件以及我的程序(源)的位置,但是我抛出了一个异常,我不明白为什么 我的文件有很多没有特殊字符的单词, 非常感谢帮助。

    FILE* f;
    char c;
    f = fopen("dictionary.txt", "rt");

    while ((c = fgetc(f)) != EOF) 
        printf("%c", c);
    

    fclose(f);

她例外 while ((c = fgetc(f)) != EOF)

调试的信息是

表达式:stream.void() 有关程序如何导致断言失败的信息,请参阅有关断言的 c++ 文档。

【问题讨论】:

我预计文件未正确打开。使用前不检查文件指针是否有效。 旁白:char c; 应该是 int c;,以便您可以区分 0xFFEOF。大多数库函数采用或返回一个“字符”作为int 而不是char,实际上例如'A' 的类型为 int。您可以使用printf("%c", c)printf("%d", c)(用于字符或其编码),因为传递给%cchar 无论如何都会被提升为int(对于可变参数函数)。认为“字符”是char,或者“数字”是int,这是初学者的错误。 错误信息表明您使用的是 C++ 而不是 C。 如何解决 【参考方案1】:

需要检查返回值fopen()文件是否打开成功 请注意,您需要包含 stdlib.h 才能使用 exit()

    FILE* f;
    int c;
    if ((f = fopen("dictionary.txt", "r")) == NULL)
        printf("error in opening a file");
        exit(1);
    

    while ((c = fgetc(f)) != EOF) 
        printf("%c", c);//printing to the console
    

    fclose(f);

【讨论】:

消息是“打开文件时出错”问题出在哪里? 您是否手动检查文件是否存在并确保将正确的文件名称传递给 fopen() 是的,我检查了文件我找到了 driver.c 文件 此文本文件 (dictionary.txt) 是否存在于您当前的目录或文件夹中? @yovelde 他只在库中,然后我将其复制到源文件夹,他现在没有记录这些文件中没有再次出现异常“workhome4 中 0x79B3FC66 (ucrtbased.dll) 处的未处理异常.exe: 一个无效参数被传递给一个认为无效参数致命的函数。"

以上是关于如何读取文件并在c中打印的主要内容,如果未能解决你的问题,请参考以下文章

如何从文本文件创建二维数组并在 c 中打印到新文件

在 C 中,我应该如何读取文本文件并打印所有字符串

PHP如何把数据写入JSON文件并在另一PHP文件读取JSON数据?

C - 文件的读取()错误,存储在数组中并正确打印输出

在 C 中读取和打印 .txt 文件行的最清晰方法

如何从流中读取 CSV 文件并在写入时处理每一行?