在格式字符串中多次使用%n似乎不起作用

时间:2016-07-31 20:30:14

标签: c

我正在努力确保我理解%n的使用方式,并且我有以下非常简单的代码

#include <stdio.h>
int main (void)
{
  int c1, c2;
  printf("This%n is fun%n\n", &c1, &c2);
}

它应该打印&#34;这很有趣&#34;并存储在c1和c2中打印的字符数。但我得到的所有输出都是字符串&#34; This&#34;。我正在使用MinGw v 4.9.3在Windows10上编译它。

1 个答案:

答案 0 :(得分:1)

打印This后,您的程序崩溃了。

MinGW默认使用Microsoft的Visual C ++运行时。 MSDN说关于“%n”:

  

因为%n格式本质上不安全,所以它被禁用   默认。如果在格式字符串中遇到%n,则无效   调用参数处理程序,如Parameter Validation中所述。至   启用%n支持,请参阅_set_printf_count_output

默认的无效参数处理程序会中止您的程序。通过_set_printf_count_output(1)启用或使用-D__USE_MINGW_ANSI_STDIO=1进行编译以使用它。