#define SIZE 9
int number=5;
char letters[SIZE]; /* this wont be null-terminated */
...
char fmt_string[20];
sprintf(fmt_string, "%%d %%%ds", SIZE);
/* fmt_string = "%d %9d"... or it should be */
printf(fmt_string, number, letters);
有更好的方法吗?
答案 0 :(得分:105)
无需构造特殊格式字符串。如果您使用printf
作为格式标记中的精度,.*
允许您使用参数(在值之前)指定精度。
例如:
printf ("%d %.*s", number, SIZE, letters);
注意:宽度(最小字段宽度)和精度(它给出了要打印的最大字符数)之间存在区别。
%*s
指定宽度,%.s
指定精度。 (你也可以使用%*.*
但是你需要两个参数,一个用于精度的宽度一个
另请参见printf手册页(Linux下的man 3 printf
),特别是有关字段宽度和精度的部分:
代替十进制数字字符串,可以写“*”或“* m $”(对于某些人来说) 十进制整数m)指定精度在下一个中给出 参数,或分别在第m个参数中,必须是int类型。
答案 1 :(得分:4)