相关疑难解决方法(0)

将预处理程序标记转换为字符串

我正在寻找一种方法将预处理器令牌转换为字符串.

具体来说,我在某处得到了:

#define MAX_LEN 16
Run Code Online (Sandbox Code Playgroud)

我想用它来防止缓冲区溢出:

char val[MAX_LEN+1]; // room for \0
sscanf(buf, "%"MAX_LEN"s", val);
Run Code Online (Sandbox Code Playgroud)

我愿意通过其他方式来完成同样的事情,但仅限标准库.

c stringification c-preprocessor

60
推荐指数
3
解决办法
7万
查看次数

如何从C宏的值创建一个char字符串?

例如,如何避免两次写'func_name'?

#ifndef TEST_FUN
#  define TEST_FUN func_name
#  define TEST_FUN_NAME "func_name"
#endif
Run Code Online (Sandbox Code Playgroud)

我想遵循单点真相规则.

C预处理器的版本:

$ cpp --version
cpp (GCC) 4.1.2 20070626 (Red Hat 4.1.2-14)
Run Code Online (Sandbox Code Playgroud)

c dry c-preprocessor

50
推荐指数
2
解决办法
10万
查看次数

将#defined常数转换为字符串

我有一个常量定义:

#define MAX_STR_LEN 100
Run Code Online (Sandbox Code Playgroud)

我想这样做:

scanf("%" MAX_STR_LEN "s", p_buf);
Run Code Online (Sandbox Code Playgroud)

但当然这不起作用.

可以使用什么预处理器技巧将MAX_STR_LEN数字转换为字符串,以便我可以在上面的scanf调用中使用它?基本上:

scanf("%" XYZ(MAX_STR_LEN) "s", p_buf);
Run Code Online (Sandbox Code Playgroud)

XYZ()应该是什么?

注意:我当然可以直接做"%100s",但这样做会失败.我也可以#define MAX_STR_LEN_STR"100",但我希望有一个更优雅的解决方案.

c macros c-strings stringification c-preprocessor

5
推荐指数
1
解决办法
6441
查看次数

标签 统计

c ×3

c-preprocessor ×3

stringification ×2

c-strings ×1

dry ×1

macros ×1