我正在寻找一种将预处理器令牌转换为字符串的方法。具体来说,我在某处:#define MAX_LEN 16我想用它来防止缓冲区溢出:char val[MAX_LEN+1]; // room for \0sscanf(buf, "%"MAX_LEN"s", val);我愿意采用其他方式来完成同一件事,但仅限于标准库。
3 回答
人到中年有点甜
TA贡献1895条经验 获得超7个赞
我在网上找到了答案。
#define VERSION_MAJOR 4
#define VERSION_MINOR 47
#define VERSION_STRING "v" #VERSION_MAJOR "." #VERSION_MINOR
上面的方法不起作用,但希望能说明我想做的事情,即使VERSION_STRING最终为“ v4.47”。
要生成适当的数字形式,请使用类似
#define VERSION_MAJOR 4
#define VERSION_MINOR 47
#define STRINGIZE2(s) #s
#define STRINGIZE(s) STRINGIZE2(s)
#define VERSION_STRING "v" STRINGIZE(VERSION_MAJOR) \
"." STRINGIZE(VERSION_MINOR)
#include <stdio.h>
int main() {
printf ("%s\n", VERSION_STRING);
return 0;
}
- 3 回答
- 0 关注
- 423 浏览
添加回答
举报
0/150
提交
取消