没有正确计算到目前为止写的字符数

时间:2015-02-17 13:26:41

标签: c codeblocks

据我所知,使用%n =“关联参数是一个指向一个整数的指针,到目前为止所写的字符数被放入该整数中。 我正在使用win 8,codeblocks IDE。我尝试了一个应至少打印15个字符的程序。但它只显示8.我已经重新启动了程序,甚至计算机,但结果是一样的。

我也是从命令行编译的。

代码片段如下所示。

快照上传的结果。

首先输出随机数。 enter image description here

#include<stdio.h>
 int main(void)
  {
   int i;
   printf("%d %f \n%n",100, 123.23, &i);
   printf("%d characters is so far.",i);
   return 0;
 }

2 个答案:

答案 0 :(得分:1)

这个问题是Windows特有的,它源于Windows&#39;出于安全原因,C库禁用%n说明符。

要绕过此操作,请转到Settings -> Compiler,然后在Global Compiler Settings转到Other options并添加-D__USE_MINGW_ANSI_STDIO。这将启用%n说明符。

答案 1 :(得分:0)

[编辑::编辑问题后添加]

@Daniel answer中所述,这看起来像是您的操作系统特定C库的特定问题。看起来似乎不支持%n格式说明符。


不过,下面的答案很有帮助(恕我直言,需要),所以保持原样。

我想,你错误地阅读了这个定义。它不计算所有之前的调用,而是考虑来自同一调用的输出

根据第7.21.6.1章,C11标准,fprintf()描述,第8段[强调我的]

  

n

     

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