据我所知,使用%n =“关联参数是一个指向一个整数的指针,到目前为止所写的字符数被放入该整数中。 我正在使用win 8,codeblocks IDE。我尝试了一个应至少打印15个字符的程序。但它只显示8.我已经重新启动了程序,甚至计算机,但结果是一样的。
我也是从命令行编译的。
代码片段如下所示。
快照上传的结果。
首先输出随机数。
#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;
}
答案 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中。没有参数被转换,但是消耗了一个参数。如果转换 规范包括任何标志,字段宽度或精度,行为是 未定义。