【问题标题】:What happens when I use the wrong format specifier?当我使用错误的格式说明符时会发生什么?
【发布时间】:2013-05-27 16:53:43
【问题描述】:

只是想知道当我在 C 中使用错误的格式说明符时会发生什么?

例如:

x = 'A';
printf("%c\n", x);
printf("%d\n", x);

x = 65;
printf("%c\n", x);
printf("%d\n", x);

x = 128;
printf("%d\n", x);

【问题讨论】:

  • 你为什么不试试... C
  • 呃,不要滥用我们不能对 cme​​ts 投票的事实。 :)
  • 请注意,在这种特定情况下,您没有使用错误的格式说明符...
  • 如果没有x 的声明,这是无法回答的。
  • @MattBall 这很少是 C 问题的正确答案。

标签: c format-specifiers


【解决方案1】:

当我在 C 中使用错误的格式说明符时会发生什么?

一般来说,未定义的行为。*

但是,请记住 printf 是一个可变参数函数,可变参数函数的参数经过默认参数提升。例如,char 被提升为int。所以在实践中,这些都会给出相同的结果:

char x = 'A';
printf("%c\n", x);

int y = 'A';
printf("%c\n", y);

而这是未定义的行为:

long z = 'A';
printf("%c\n", z);


* 例如参见 C99 标准的第 7.19.6.1 p9 节:

如果有任何参数 不是相应转换规范的正确类型,行为是 不明确的。

【讨论】:

  • 是的,根据 C11 7.21.6.1 p9 的未定义行为。
  • 顺便说一句,假设x 的类型为int,我在OP 代码中看不到任何错误的格式说明符。
【解决方案2】:

因为 x 是 A,所以第一个打印 f 将打印:'A'。

第二个将打印 A 的 ascii 值(查找)。

第三个将打印 65 的 ascii 字符(我认为这是 A 或 a,但它是一个字母)。

第四个将打印 65。

第 5 个将打印 128。

【讨论】:

  • 行为将完全取决于x的类型(问题本身未指定)。
猜你喜欢
  • 1970-01-01
  • 2014-05-25
  • 2020-07-26
  • 2017-11-12
  • 2011-09-26
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多