printf字符串,可变长度项

时间:2011-05-09 03:30:54

标签: c format printf

#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);

有更好的方法吗?

2 个答案:

答案 0 :(得分:105)

无需构造特殊格式字符串。如果您使用printf作为格式标记中的精度,.*允许您使用参数(在值之前)指定精度。

例如:

printf ("%d %.*s", number, SIZE, letters);

注意:宽度(最小字段宽度)和精度(它给出了要打印的最大字符数)之间存在区别。 %*s指定宽度,%.s指定精度。 (你也可以使用%*.*但是你需要两个参数,一个用于精度的宽度一个

另请参见printf手册页(Linux下的man 3 printf),特别是有关字段宽度和精度的部分:

  

代替十进制数字字符串,可以写“*”或“* m $”(对于某些人来说)   十进制整数m)指定精度在下一个中给出   参数,或分别在第m个参数中,必须是int类型。

答案 1 :(得分:4)

有些未知的功能是asprintf。第一个参数是**char。此函数将为{1}}字符串留出空间,因此您无需进行簿记。完成后请记住malloc字符串。

free

是一个使用示例。