我正在尝试创建一个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”。此链接几乎适用于我的应用程序:将预处理器令牌转换为字符串,但它不处理 -1。
建议?