C99 printf中的变量前导零

C99 printf中的变量前导零,c,printf,C,Printf,我正在用C99编写一个多精度库。根据编译代码的平台,我选择了不同的表示基础 例如,假设在平台X上,系统选择BASE=100;平台上Y底座=10000 假设我表示大的无符号int,如下所示: typedef结构a{ 足够大的单位*位数; 无符号整数长度; 最后一个无符号整数; }bigUint; 所以,当我使用BASE-100系统时,我希望我的打印功能 在BASE-100表示法中,数字数组为(小端形式): 在BASE-10000中: 12|3456|2|6789 ^ I wan

我正在用C99编写一个多精度库。根据编译代码的平台,我选择了不同的表示基础

例如,假设在平台X上,系统选择BASE=100;平台上Y底座=10000

假设我表示大的无符号int,如下所示:

typedef结构a{
足够大的单位*位数;
无符号整数长度;
最后一个无符号整数;
}bigUint;
所以,当我使用BASE-100系统时,我希望我的打印功能

在BASE-100表示法中,数字数组为(小端形式):

在BASE-10000中:

12|3456|2|6789
        ^ I want THREE LEADING ZEROES

有简单的方法吗?

阅读
*
中的字段宽度占位符
man printf

printf("%0*d", 3, 42);
给予

042

给予

alk

谢谢,这正是我想要的。我实际做的是定义一个宏,类似于LOG10_BASE,并在printf中使用它,就像你建议的那样
printf(“%0*d”,LOG10_BASE,a->digits[0])请注意,C标准和POSIX都不要求使用带字符串的空格修饰符(严格来说,行为是未定义的);它使用有符号和无符号数字定义其行为。您还可以使用
printf(“%d”,3,42)
打印
042
;C99标准的基本原理表明委员会倾向于此(尽管
0
修饰符也适用)。
12|3456|2|6789
        ^ I want THREE LEADING ZEROES
printf("%0*d", 3, 42);
042
printf("% *s", 42, "alk");
<39 spaces>alk