Converting a #defined constant number to a string
Asked Answered
C

1

6

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.

Caril answered 29/9, 2012 at 0:51 Comment(2)
#define f(x) #x will preprocess f(foo) into "foo"Mediate
You might want to look at my answer at #5256813Innervate
I
23

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);
Inwards answered 29/9, 2012 at 0:53 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.