2014-01-18 87 views
5

我正在嘗試使用轉換字符來計算迄今爲止使用以下代碼打印的字符數。代碼塊MinGW和%n轉換字符

#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:欄全部在一行上。爲什麼這樣,我可以解決這個問題?

回答

5

使用編譯選項-D__USE_MINGW_ANSI_STDIO

E.g

>gcc prog.c -D__USE_MINGW_ANSI_STDIO 

>clang prog.c -D__USE_MINGW_ANSI_STDIO 

另一種解決方法是將此命令放在第一個導入語句的上面(如下所示)。這將確保ANSI I/O標準優於微軟。更多的信息在這個鏈接here

#define __USE_MINGW_ANSI_STDIO 1 
#include <stdio.h> 
+0

你能鏈接一個文件嗎?我花了一段時間試圖挖掘更多的細節,我很好奇搜索時錯過了什麼。 –

+1

@ShafikYaghmour http://sourceforge.net/apps/trac/mingw-w64/wiki/printf%20and%20scanf%20family – BLUEPIXY

3

看起來這是Windows的問題,這article說:

默認在Vista C運行時庫(MSVCRT.DLL)似乎有%N默認情況下禁用 - 當然

安全原因

它看起來像有一個_set_printf_count_output來啓用它。

BLUEPIXY發現,爲了得到它的工作外Visual Studioneed to define__USE_MINGW_ANSI_STDIO

#define __USE_MINGW_ANSI_STDIO 1 
+0

這很好,但是如何使用代碼塊調用該命令?我有一個未定義的引用錯誤。我甚至在Visual Studio 2010中嘗試過它,並得到類似的錯誤。 –

+0

不確定,我能夠獲得MSDN代碼,以便在rextester的visual studio中工作,[請參閱它的實況](http://rextester.com/LQB95928)。 –

相關問題