转换说明符%n到底做了什么?

时间:2015-03-17 15:25:38

标签: c printf

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

  

7.19.6.1 fprintf函数

  

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

关于:

  

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

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

我是否认为是正确的,根据:

  

返回

     

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

在此片段中:

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

a等于b

2 个答案:

答案 0 :(得分:3)

  

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

“到目前为止”,意味着只要您放置%n,结果就会发生变化。举个例子,它将是3。

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

返回的值

答案 1 :(得分:1)

对于你的案例,

a = 3和b = 19

a将等于%n之前打印的字符数。 假设你试图打印printf("这个%sis%n只是一个测试","编码器",& a); 那么a的值将是这个+编码器+ = 11。

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