【发布时间】:2011-02-13 23:10:07
【问题描述】:
我正在尝试创建一个sscanf 字符串文字来帮助防止 C99 中的缓冲区溢出。目标是这样的:
#define MAX_ARG_LEN 16
char arg[MAX_ARG_LEN] = "";
if (sscanf(arg, "%"(MAX_ARG_LEN-1)"X", &input) > 0)
明显的“手动”解决方案类似于:
#define MAX_ARG_LEN 16
#define MAX_ARG_CHARS "15"
char arg[MAX_ARG_LEN] = "";
if (sscanf(arg, "%"MAX_ARG_CHARS"X", &input) > 0)
但是,如果缓冲区大小为 16,我希望自动生成“%15X”。此链接几乎适用于我的应用程序:Convert a preprocessor token to a string,但它不处理 -1 .
建议?
【问题讨论】:
标签: c string concatenation scanf c-preprocessor