Usando o pré-processador C para construir uma string literal para scanf?
Estou tentando criar umsscanf
literal de string para ajudar na prevenção de saturação de buffer em C99. O objetivo é algo como:
#define MAX_ARG_LEN 16
char arg[MAX_ARG_LEN] = "";
if (sscanf(arg, "%"(MAX_ARG_LEN-1)"X", &input) > 0)
A solução óbvia "manual" é algo como:
#define MAX_ARG_LEN 16
#define MAX_ARG_CHARS "15"
char arg[MAX_ARG_LEN] = "";
if (sscanf(arg, "%"MAX_ARG_CHARS"X", &input) > 0)
No entanto, eu preferiria algo para gerar automaticamente "% 15X", considerando um tamanho de buffer 16. Este link équase funciona para o meu aplicativo:Converter um token de pré-processador em uma sequência mas não lida com o -1.
Sugestões?