2012-09-29 40 views
3

我定義的常數:轉換一個#define的常數爲字符串

#define MAX_STR_LEN 100 

我試圖做到這一點:

scanf("%" MAX_STR_LEN "s", p_buf); 

但是,當然,這是行不通的。

什麼預處理技巧可用於將MAX_STR_LEN數字轉換爲字符串,以便我可以在上面的scanf調用中使用它?基本上:

scanf("%" XYZ(MAX_STR_LEN) "s", p_buf); 

XYZ()應該是什麼?

注意:我當然可以直接做「%100s」,但是這樣做會失敗。我也可以做#定義MAX_STR_LEN_STR「100」,但我希望有一個更優雅的解決方案。

+1

'的#define F(X)#x'將預處理'F(富)''到 「富」' –

+0

你可能想看看我在http回答:// stackoverflow.com/questions/5256313/cc-macro-string-concatenation/5256500 –

回答

15

使用#預處理運算符。這個操作符只在宏擴展期間工作,所以你需要一些宏來幫助。此外,由於宏替代算法固有的特性,您需要一個間接層。結果是這樣的:

#define STRINGIZE_(x) #x 
#define STRINGIZE(x) STRINGIZE_(x) 

scanf("%" STRINGIZE(MAX_STR_LEN) "s", p_buf); 
相關問題