2014-11-24 57 views
4

正在經歷一些舊代碼,發現:printf/snprintf格式字符%N做什麼? (未%N)

char buf[...]; 
int i = 1, j =2; 
snprintf(buf, "%d-blah_%d-blah_%N", i, j); 

注意只有兩個傳遞可變參數的參數,但3個格式字符串。

它打印

1-blah_2-blah_0 

不能在任何文檔中找到它。 %N做什麼?

+0

是'%N'甚至事?我很難找到它的參考。 – tadman 2014-11-24 20:12:46

+9

您可能看到未定義的行爲,或者您看到特定於實現的擴展。你使用什麼編譯器? – 2014-11-24 20:12:47

+0

@OliverCharlesworth在CentOS上的簡潔的GCC。沒什麼特別的。 snprintf似乎來自stdio.h。 – marathon 2014-11-24 20:15:14

回答

1

它在微軟的CRT一個有趣的案例。似乎發生的事情是%N被視爲大小說明符,但最後它會被忽略。

可以在<VSDIR>/VC/crt/src/output.c找到源和VS2013,你會發現下面幾行:

enum CHARTYPE { 
    ... 
    CH_SIZE,   /* 'h', 'l', 'L', 'N', 'F', 'w' */ 
    ... 
}; 

'N'也在查找狀態表中。 The documentation says nothing about it,也沒有提及'F'。在源代碼(case ST_SIZE)事實證明'N''F''L'(儘管文檔!)的仔細檢查都是無操作大小調節劑。

所以,針對你的情況VS2013你會得到1-blah_2-blah_,無尾0

相關問題