#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);有没有更好的方法来做这件事?
发布于 2011-05-09 12:07:39
不需要构造特殊格式的字符串。如果在.*标签中使用格式作为精度,则printf允许您使用参数(在值之前)指定精度。
例如:
printf ("%d %.*s", number, SIZE, letters);注意:宽度(最小字段宽度)和精度(给出要打印的最大字符数)是有区别的。%*s指定宽度,%.s指定精度。(您也可以使用%*.*,但需要两个参数,一个用于宽度,另一个用于精度)
另请参阅printf手册页(Linux下的man 3 printf),特别是关于字段宽度和精度的部分:
可以编写"*“或"*m$”(对于某个十进制整数m)来指定精度分别在下一个参数或第m个参数中给出,而不是十进制数字字符串,这两个参数的类型必须为int.
发布于 2011-05-09 11:49:58
一个不太知名的函数是asprintf。第一个参数是**char。这个函数会malloc字符串的空格,这样你就不必记账了。记住在完成时对字符串执行free。
char *fmt_string;
asprintf(&fmt_string, "%%d %%%ds", SIZE);
printf(fmt_string, number, letters);
free(fmt_string);是一个使用的例子。
https://stackoverflow.com/questions/5932214
复制相似问题