【问题标题】:How to read a file and print it in c如何读取文件并在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。
  • 如何解决

标签: c doc


【解决方案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: 一个无效参数被传递给一个认为无效参数致命的函数。"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-05
  • 1970-01-01
相关资源
最近更新 更多