下面是我得到的函数的一部分代码:
char ch;
ch = fgetc(fp);
if (ch == EOF)
return -1;其中fp是作为参数传递给函数的指向文件/流的指针。
但是,在检查了fgetc()、getc()和getchar()的用法之后,它们似乎都返回了int类型,而不是char类型,因为EOF不适合于字符中使用的值0-255,因此通常是<0(例如-1)。然而,这导致我提出三个问题:
getchar()返回int,为什么char c; c = getchar();是函数的有效用法?在本例中,C会自动将类型转换为char吗?在getchar()被getc(fp)或fgetc(fp)替换的情况下fgetc()或其他两个函数返回EOF时,程序中会发生什么?它会不会再试着像以前一样投下焦炭,然后失败呢?什么存储在ch中,如果有的话?ch == EOF如何是一个有效的比较,因为EOF不能用char变量表示?发布于 2017-04-14 13:16:55
如果getchar()返回int,为什么char c;c= getchar();函数的有效用法?
事实并非如此。仅仅因为您可以编写和编译器(以某种方式)允许您编译它,并不能使代码有效。
我相信以上回答了所有的问题。
添加一下,万一EOF被返回,它就不能存储在char中。定义了char的签名性,因此,按照第6.3.1.3章,C11
https://stackoverflow.com/questions/43412305
复制相似问题