Использование препроцессора C для создания строкового литерала для scanf?
Я пытаюсь создать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)
Тем не менее, я бы предпочел, чтобы что-то автоматически генерировало «% 15X», учитывая размер буфера 16. Эта ссылкапочти работает для моего приложения:Преобразовать токен препроцессора в строку но он не обрабатывает -1.
Предложения?