1

这是来自Ritchie & Kernighan 的 The C Programming Language 的一些示例代码。

int c;
        while((c=getchar())!=EOF) {
            putchar(c);
        }

请注意, putchar 指的是int类型的变量。为什么可以使用此代码返回和显示字符和整数?

4

3 回答 3

4

Anint通常由 4 个字节表示,而 achar实际上只是 1 个字节的数据。int您可以轻松地在返回的单曲中存储完整的字符以及更多内容getchar()。当一个 int 被传递给putchar(int)它时,它只是在显示它之前去掉额外的空间。这种技术对于传递EOF实际上根本不是 achar而是int表示文件结束的 an 非常有用。

于 2012-04-14T00:06:34.390 回答
1

char 类型只不过是一个整数,在大多数情况下只是一个 8 位字节。int 类型是一个整数,它通常更宽,因此可以保留 char 可以保留的所有可能值。为了使检查工作,它必须保持sizeof(int) > sizeof(char). 几乎总是如此。但如果我记得很清楚,据说该标准并没有强制要求这样做;这意味着检查已读取的 EOF 是否为真正的文件结尾的唯一可移植且安全的方法是检查feof(FILE *). (例如,如果在您的系统上 CHAR_BIT 为 16,则 sizeof(char) == 1 根据定义,但 sizeof(int) 也可能为 1)。

于 2012-04-14T00:32:32.570 回答
1

getchar()返回int,以便它可以可靠地保存该EOF值(定义为任何负整数,在大多数实现中为-1)。根据char实现,类型可以是有符号的或无符号的。如果它是有符号的,那么它可能能够保存在类型范围内EOF提供的值,如果它是无符号的,那么在转换为类型时它可能与实际的字符值无法区分。EOFsigned charEOFunsigned char

于 2012-04-14T00:33:46.113 回答