代码块MinGW和%n转换字符

And*_*w S 5 c printf mingw codeblocks

我正在尝试使用转换字符来计算到目前为止使用以下代码打印的字符数.

#include <stdio.h>
int main(void) {
    int n;
    printf("%s: %nFoo\n", "hello", &n);
    printf("%*sBar\n", n, "");
}
Run Code Online (Sandbox Code Playgroud)

正确工作时,此代码打印Hello Foo,然后在下一行中,Bar与Foo对齐.

在我的linux机箱上使用GCC编译时,这很好用.但是,当我在Windows PC上的代码块中使用minGW编译时%n不起作用,所有打印的都是hello:Bar all在一行上.为什么这样,我能解决这个问题吗?

BLU*_*IXY 5

使用编译选项 -D__USE_MINGW_ANSI_STDIO

例如

>gcc prog.c -D__USE_MINGW_ANSI_STDIO
Run Code Online (Sandbox Code Playgroud)

要么

>clang prog.c -D__USE_MINGW_ANSI_STDIO
Run Code Online (Sandbox Code Playgroud)

另一个解决方案是将此命令放在第一个import语句之上,如下所示(见下文).这将确保ANSI I/O标准优于Microsoft.此处链接中的更多信息.

#define __USE_MINGW_ANSI_STDIO 1
#include <stdio.h>
Run Code Online (Sandbox Code Playgroud)