代码之家  ›  专栏  ›  技术社区  ›  ArekBulski

gcc fprintf:应该是int(32位)还是char(8位)?

  •  0
  • ArekBulski  · 技术社区  · 6 年前

    int c;
    fprintf(stdout, "%c", c);
    int n;
    fprintf(stdout, "%c", n);
    

    关于scanf的同样问题,应该是char或int还是两者之一?

    1 回复  |  直到 6 年前
        1
  •  3
  •   paxdiablo    6 年前

    7.21.6.1 The fprintf function /9 *printf *scanf fprintf fscanf )即:

    %c ( /8

    l int 参数转换为 unsigned char

    char 6.5.2.2 Function calls /6 /7 6.3 Conversions

    对每个参数执行整数提升,具有float类型的参数提升为double。这些被称为默认参数提升。

    如果一个

    格式化输出

    int fprintf(FILE * restrict stream, const char * restrict format, ...);
    

    它的意思是 参数将升级为


    7.21.6.2 The fscanf function /12

    如果没有 存在长度修饰符,相应参数应为 性格

    (或字符数组)。如果您提供 它的尺寸不一样,你可能只看到 其中 更改后,剩下的将保留为某个任意值。例如,在一个8位字节上,4个字节 ,大端系统:

    +------+------+------+------+
    | 0x12 | 0x34 | 0x56 | 0x78 | <- Initial value of int 0x12345678
    +------+------+------+------+
    | 0x36 | .... | .... | .... | <- Read character '6' (0x36 in ASCII)
    +------+------+------+------+
    | 0x36 | 0x34 | 0x56 | 0x78 | <- Final value of int 0x36345678
    +------+------+------+------+
    

    其他 保持原样(代表为 .... 成为某物 0x36