Verwenden Sie den C-Präprozessor, um ein Zeichenfolgenliteral für scanf zu erstellen?

Ich versuche ein @ zu erstellsscanf Zeichenkettenliteral zur Unterstützung der Pufferüberlaufverhinderung in C99. Das Ziel ist so etwas wie:

#define MAX_ARG_LEN   16

char arg[MAX_ARG_LEN] = "";

if (sscanf(arg, "%"(MAX_ARG_LEN-1)"X", &input) > 0)

Die naheliegende "manuelle" Lösung sieht so aus:

#define MAX_ARG_LEN   16
#define MAX_ARG_CHARS "15"

char arg[MAX_ARG_LEN] = "";

if (sscanf(arg, "%"MAX_ARG_CHARS"X", &input) > 0)

Ich würde es jedoch vorziehen, wenn bei einer Puffergröße von 16 automatisch "% 15X" generiert würde. Dieser Link lautetfas funktioniert für meine Anwendung:Umwandle ein Präprozessor-Token in einen String aber es behandelt nicht die -1.

Vorschläge

Antworten auf die Frage(2)

Ihre Antwort auf die Frage