Converting a #defined constant number to a string
-
04-07-2021 - |
Question
I have a constant defined:
#define MAX_STR_LEN 100
I am trying to do this:
scanf("%" MAX_STR_LEN "s", p_buf);
But of course that doesn't work.
What preprocessor trick can be use to convert the MAX_STR_LEN numerica into a string so I can use it in the above scanf call ? Basically:
scanf("%" XYZ(MAX_STR_LEN) "s", p_buf);
What should XYZ() be ?
Note: I can of course do "%100s" directly, but that defeats the purpose. I can also do #define MAX_STR_LEN_STR "100", but I am hoping for a more elegant solution.
Solution
Use the #
preprocessing operator. This operator only works during macro expansion, so you'll need some macros to help. Further, due to peculiarities inherent in the macro replacement algorithm, you need a layer of indirection. The result looks like this:
#define STRINGIZE_(x) #x
#define STRINGIZE(x) STRINGIZE_(x)
scanf("%" STRINGIZE(MAX_STR_LEN) "s", p_buf);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow