首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么K&R中写着EOF不适合煤焦?

为什么K&R中写着EOF不适合煤焦?
EN

Stack Overflow用户
提问于 2016-07-02 15:07:23
回答 2查看 211关注 0票数 2

我刚开始学习C语言,我需要问你这个问题:

我知道函数getchar()给出的整数总是正数。例如,对于\t,结果是32,这个值可以存储在char中。

K&R的书说,EOF,即-1,不能存储在char (但在现实中,它可以)。不管怎样,它不适用于未签名的字符。

我对此的解释是,char可以存储从-127127的值,因此它可以包含-1,但是无符号字符只能从0存储到255,所以不能包含-1

我说的对吗?为什么K&R的书会这么说?

EN

回答 2

Stack Overflow用户

发布于 2016-07-02 15:20:10

K&R的书说,EOF,即-1不能存储在字符(但在房地产,它可以)。

标准没有指定charsigned类型还是unsigned类型。由实现来决定charsigned类型还是unsigned类型。对于将unsigned类型用于char的实现,不能在char中保存值-1int是一个signed类型,它可以保存值-1。这就是为什么intgetchargetcfgetc的返回类型。

票数 2
EN

Stack Overflow用户

发布于 2016-07-02 16:02:57

C中的getc函数访问一个流,并返回0到UCHAR_MAX范围内的非负字节值,或者返回一个等于EOF常量的值,该值为负值。它作为类型int值返回。

这两个数据范围不能适应char类型,无论它是有符号的还是无符号的。如果将EOF值存储在char中,则会造成歧义,因为它与有效字节值发生冲突。0UCHAR_MAX的范围已经声明了字符类型中的所有可能值。

假设我们现在处在一个几乎无所不在的8位,两位互补的世界。签名的char的值从-128到127。该范围涵盖-1:值-1可能发生在char-s流中。unsigned char范围从0到255。值-1不发生;但是如果-1被转换为unsigned char,它将变成255。这是一个有效的字节值。(请注意,EOF不一定是-1,但类似的推理也适用于其他负值。国际标准化组织只说EOF是阴性的。可能是INT_MIN!)

如果您确实使用一个getc捕获了char的返回值,那么每次看到一个与EOF相等的值时,您都必须测试ferror(stream) || feof(stream)。如果这个测试是假的,那么EOF实际上是一个字节值,您必须相应地对待它。

(这也必须在发生sizeof (int) == 1的平台上完成)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38161505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档