6

我定义了一个常量:

#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”,但这违背了目的。我也可以做#define MAX_STR_LEN_STR "100",但我希望有一个更优雅的解决方案。

4

1 回答 1

20

使用#预处理运算符。此运算符仅在宏扩展期间有效,因此您需要一些宏来帮助。此外,由于宏替换算法固有的特性,您需要一个间接层。结果如下所示:

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

scanf("%" STRINGIZE(MAX_STR_LEN) "s", p_buf);
于 2012-09-29T00:53:13.287 回答