2012-09-29 15 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); 
相关问题