如何在C中填充数字时使用宏?

时间:2013-03-19 15:05:23

标签: c

我正在尝试在sprintf语句中使用宏。就像这样:

#define MACR 6

....
int Number= 5;
char Formatted[30];
sprintf( Formatted, "%06d", Number );

在这里,我想使用MACR代替6.可以有人帮我吗?

4 个答案:

答案 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)

有两种方法可以解决这个问题:

  1. 在宏中有完整的格式:

    #define MACR  "%06d"
    
    sprintf(Formatted, MACR, Number);
    
  2. 使用*宽度说明符:

    #define MACR 6
    
    sprintf(Formatted, "%0*d", MACR, Number);
    

答案 3 :(得分:0)

#define MAKE_TEXT(x) #x
sprintf( Formatted, "%0"MAKE_TEXT(MACR)"d", Number );