将预处理器令牌转换为字符串

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


具体来说,我在某处:


#define MAX_LEN 16

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


char val[MAX_LEN+1]; // room for \0

sscanf(buf, "%"MAX_LEN"s", val);

我愿意采用其他方式来完成同一件事,但仅限于标准库。


慕森王
浏览 401回答 3
3回答

人到中年有点甜

我在网上找到了答案。#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() {&nbsp; &nbsp; printf ("%s\n", VERSION_STRING);&nbsp; &nbsp; return 0;}
打开App,查看更多内容
随时随地看视频慕课网APP