Aman Jain Aman Jain - 1 year ago 84
C Question

How to pass variable length width specifier in sscanf?

sscanf(input_str, "%5s", buf); //reads at max 5 characters from input_str to buf

But I need to use something like %MACRO_SIZEs instead of %5s

A trivial solution is to create a format string for the same

char fmt_str[100] = "";
snprintf(fmt_str, 100, "%%%ds", MACRO_SIZE);
sscanf(input_str, fmt_str, buf);

Is there a better way to achieve the same?

Answer Source

if your MACRO_SIZE is const at compile time, you can try this:

#define MACRO_SIZE "5"
snprintf(fmt_str, 100, "%" MACRO_SIZE "s", buf);
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download