我正在尝试在sprintf语句中使用宏。就像这样:
#define MACR 6
....
int Number= 5;
char Formatted[30];
sprintf( Formatted, "%06d", Number );
在这里,我想使用MACR代替6.可以有人帮我吗?
答案 0 :(得分:10)
使用*
格式说明符将width作为参数传递。这样的事情应该有效:
sprintf( Formatted, "%0*d", MACR, Number );
但请使用常数而不是MACRO。
答案 1 :(得分:2)
最简单的解决方案是指定长度
一个'*'
,并将宏作为参数传递:
sprintf( formatted, "%0*d", MACR, number );
或者,您可以连接字符串,例如:
sprintf( formatted, "%0" STRINGIZE(MACR) "d", number );
使用通常的STRINGIZE宏:
#define STRINGIZE_HELPER(x) # x
#define STIRNGIZE(x) STRINGIZE_HELPER(x)
(当然,最简单,最安全的解决方案就是忘记sprintf
,并使用std::ostringstream
。)
答案 2 :(得分:1)
有两种方法可以解决这个问题:
在宏中有完整的格式:
#define MACR "%06d"
sprintf(Formatted, MACR, Number);
使用*
宽度说明符:
#define MACR 6
sprintf(Formatted, "%0*d", MACR, Number);
答案 3 :(得分:0)
#define MAKE_TEXT(x) #x
sprintf( Formatted, "%0"MAKE_TEXT(MACR)"d", Number );