【问题标题】:getc return value stored in a char variablegetc 返回值存储在 char 变量中
【发布时间】:2013-09-03 14:42:01
【问题描述】:

this Wikipedia 页面上有一个示例 C 程序从文件读取和打印前 5 个字节:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char buffer[5] = {0};  /* initialized to zeroes */
    int i;
    FILE *fp = fopen("myfile", "rb");

    if (fp == NULL) {
        perror("Failed to open file \"myfile\"");
        return EXIT_FAILURE;
    }


    for (i = 0; i < 5; i++) {
        int rc = getc(fp);
        if (rc == EOF) {
            fputs("An error occurred while reading the file.\n", stderr);
            return EXIT_FAILURE;
        }
        buffer[i] = rc;
    }

    fclose(fp);

    printf("The bytes read were... %x %x %x %x %x\n", buffer[0], buffer[1], buffer[2], buffer[3], buffer[4]);

    return EXIT_SUCCESS;
}

我不明白的部分是它使用了getc 函数,该函数返回一个int 并将其存储在chars 的数组中-如何将ints 存储在@987654327 中@数组?

【问题讨论】:

    标签: c getc


    【解决方案1】:

    签出this:-

    如果getc()返回的整数值存入一个变量 输入 char 然后与整数常量 EOF 进行比较, 比较可能永远不会成功,因为变量的符号扩展 char 类型扩展为整数是实现定义的。

    【讨论】:

      【解决方案2】:

      是的,getc() 返回一个整数。但是,除了特殊的返回值 EOF,返回值总是在一个字符的范围内(在默认有符号字符的 2 的补码机器上为 -128 到 127)。

      因此,在检查 EOF 之后,始终可以安全地将值传输到 char 变量而不会丢失数据。

      【讨论】:

        【解决方案3】:

        从技术上讲,C 允许您通过将变量分配给比自身小的变量来“缩短”变量。规范并没有确切说明当你这样做时会发生什么(因为在某些机器中会发生一些奇怪的事情),但实际上,在你可能使用的几乎所有机器上,除非你在博物馆作品或一些非常特殊硬件,它的作用就好像较大数字的“高”位已被“切断”。

        在这种特殊情况下,getc 专门用于返回适合char 的内容,但返回EOF 的情况除外,它通常具有值-1。虽然很多时候,char 也可能支持具有值 -1,但不能保证是这种情况(如果 char 是无符号类型 - C 和 C++ 标准同样支持 char 是签名类型可以是-1)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-11-09
          • 1970-01-01
          • 2022-11-17
          • 1970-01-01
          • 2021-01-24
          • 2013-04-24
          • 2013-02-07
          • 2017-01-07
          相关资源
          最近更新 更多