我正在尝试使用转换字符来计算到目前为止使用以下代码打印的字符数。
#include <stdio.h>
int main(void) {
int n;
printf("%s: %nFoo\n", "hello", &n);
printf("%*sBar\n", n, "");
}
当正确工作时,此代码会打印Hello Foo,然后在下一行中,Bar与Foo对齐。
在我的linux机箱上使用GCC编译时,这很好用。但是,当我在Windows PC上的代码块中使用minGW进行编译时,%n不起作用,所有打印的内容都是 hello:Bar 全部在一行上。为什么这样,我能解决这个问题吗?
答案 0 :(得分:5)
使用编译选项-D__USE_MINGW_ANSI_STDIO
E.g
>gcc prog.c -D__USE_MINGW_ANSI_STDIO
或
>clang prog.c -D__USE_MINGW_ANSI_STDIO
另一个解决方案是将此命令放在第一个import语句之上,如下所示(见下文)。这将确保ANSI I / O标准优于Microsoft。此链接中的更多信息here。
#define __USE_MINGW_ANSI_STDIO 1
#include <stdio.h>
答案 1 :(得分:3)
看起来这是一个Windows问题,article说:
默认情况下,Vista上的默认C-RunTime库(msvcrt.dll)似乎已禁用%n - 当然是安全原因
看起来有一个_set_printf_count_output来启用它。
BLUEPIXY发现为了让Visual Studio
__USE_MINGW_ANSI_STDIO
#define __USE_MINGW_ANSI_STDIO 1
{{1}}以外的方式工作:
{{1}}