我正在尝试在 sprintf 语句中使用宏。是这样的:
#define MACR 6
....
int Number= 5;
char Formatted[30];
sprintf( Formatted, "%06d", Number );
在这里,我想使用 MACR 而不是 6。有人可以帮我吗?
我正在尝试在 sprintf 语句中使用宏。是这样的:
#define MACR 6
....
int Number= 5;
char Formatted[30];
sprintf( Formatted, "%06d", Number );
在这里,我想使用 MACR 而不是 6。有人可以帮我吗?
使用*
格式说明符将宽度作为参数传递。像这样的东西应该工作:
sprintf( Formatted, "%0*d", MACR, Number );
但请使用常量而不是 MACRO。
最简单的解决方案是用 a 指定长度'*'
,并将宏作为参数传递:
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
。)
有两种方法可以解决这个问题:
在宏中有完整的格式:
#define MACR "%06d"
sprintf(Formatted, MACR, Number);
使用*
宽度说明符:
#define MACR 6
sprintf(Formatted, "%0*d", MACR, Number);
#define MAKE_TEXT(x) #x
sprintf( Formatted, "%0"MAKE_TEXT(MACR)"d", Number );