【问题标题】:What does conversion specifier %n exactly do? [duplicate]转换说明符 %n 究竟做了什么? [复制]
【发布时间】:2015-03-17 15:25:38
【问题描述】:

我刚刚通过查看标准遇到了这个:

7.19.6.1 fprintf 函数

8 转换说明符及其含义为:

关于:

n 参数应该是一个指向有符号整数的指针,其中写入了 到目前为止,此调用写入输出流的字符数 fprintf。没有参数被转换,但有一个被消耗。如果转换 规范包括任何标志、字段宽度或精度,行为是 未定义。

这是什么意思? %n 是做什么的?

我说对了吗,根据:

返回

14 fprintf函数返回传输的字符数

在这个sn-p中:

int a, b;
b = printf ("Thi%n\s is just a test",&a);

a 等于 b?

【问题讨论】:

  • 当你尝试它时会发生什么?是a == b
  • a 将是 3,因为到目前为止已经写入了 3 个字符 (Thi)。 b 的值与%n 无关。
  • 不在我可以测试的机器上,只需带上我打印的 c99 来对抗无聊;p
  • 在您的示例中,n 将等于 3。

标签: c printf


【解决方案1】:

到目前为止写入输出流的字符数

“到目前为止”,意味着无论您将%n 放在哪里,结果都会改变。以您的示例为例,它将是 3。

如果您将%s 的位置增加一个字符,则指向的结果变量将增加一。将您的%s 放在字符串的最末尾将使其等于printf 返回的值

【讨论】:

  • 我可能只是无法真正获得“到目前为止”,因为我无法看到其中的相关性。很高兴知道,谢谢。
【解决方案2】:

a = 3 和 b = 19 适合您的情况

a 将等于在 %n 之前打印的字符数。 假设您尝试打印 printf ("This%sis%n just a test","coder", &a); 那么a的值就是this + coder + is = 11。

而b的值始终是打印的字符总数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-06
    • 2015-12-02
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 2012-07-23
    • 2016-09-10
    相关资源
    最近更新 更多