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