gpt4 book ai didi

关于 fgetc 使用的说明

转载 作者:行者123 更新时间:2023-11-30 14:58:17 26 4
gpt4 key购买 nike

以下代码来 self 所获得的函数的一部分:

char ch;
ch = fgetc(fp);
if (ch == EOF)
return -1;

哪里fp是作为参数传递给函数的指向文件/流的指针。

但是,检查了 fgetc() 的用法, getc()getchar() ,似乎它们都返回 int 类型而不是 char 类型,因为 EOF 不适合 char 中使用的 0-255 值,因此通常 < 0(例如 -1)。然而,这让我问三个问题:

  1. 如果getchar()返回int,为什么是char c; c = getchar();该函数的有效用法?在这种情况下,以及 getchar() 的情况下,C 是否会自动类型转换为 char替换为 getc(fp)fgetc(fp)
  2. fgetc()时程序中会发生什么或者其他两个函数返回EOF?它会再次尝试像以前一样转换为 char 但随后失败吗? ch 中存储的内容,如果有的话?
  3. 如果 EOF 实际上不是一个字符,那么 ch == EOF 又是怎样的呢?有效的比较,因为 EOF 不能用 char 变量表示?

最佳答案

If getchar() returns int, why is char c; c = getchar(); a valid usage of the function?

事实并非如此。仅仅因为您可以编写并且编译器(以某种方式)允许您编译它,并不会使代码有效。

我相信以上回答了所有问题。

补充一下,如果返回 EOF,则无法将其存储在 char 中。 char 的符号是实现定义的,因此,根据第 6.3.1.3 章,C11

  1. When a value with integer type is converted to another integer type other than _Bool, if the value can be represented by the new type, it is unchanged.

  2. Otherwise, if the new type is unsigned, the value is converted by repeatedly adding or subtracting one more than the maximum value that can be represented in the new type until the value is in the range of the new type.60)

  3. Otherwise, the new type is signed and the value cannot be represented in it; either the result is implementation-defined or an implementation-defined signal is raised.

关于关于 fgetc 使用的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43412305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com