printf(带有%n)会引发致命错误。

时间:2014-05-02 05:05:13

标签: c printf

这是一个非常简单的代码,我正在尝试运行:

#include <stdio.h>

void main()
{
    int x;
    printf( "TEST%n", &x );
}

我希望x变得相等4而不是我的致命错误。

我使用Visual Studio 2008和Windows XP。

在执行期间,我会看到"Microsoft Visual Studio C Runtime Library has detected a fatal error..."的窗口 然后调试器打开带有_CRT_DEBUGGER_HOOK函数的dbghook.c文件。

请帮助我理解我做错了什么?

2 个答案:

答案 0 :(得分:4)

来自MSDN format type page

  

安全说明%n格式本质上不安全,默认情况下处于禁用状态;如果在格式字符串中遇到%n,则调用无效参数处理程序,如Parameter Validation中所述。要启用%n支持,请参阅_set_printf_count_output

答案 1 :(得分:-3)

#include <stdio.h>

void main()
{
    int x;
    printf("%d\n",x);
}

你使用的printf语法不正确。其他的东西是“&amp;”用于scanf。