首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >printf字符串,可变长度项目

printf字符串,可变长度项目
EN

Stack Overflow用户
提问于 2011-05-09 11:30:54
回答 2查看 87.1K关注 0票数 51
代码语言:javascript
复制
#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);

有没有更好的方法来做这件事?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-09 12:07:39

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

例如:

代码语言:javascript
复制
printf ("%d %.*s", number, SIZE, letters);

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

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

可以编写"*“或"*m$”(对于某个十进制整数m)来指定精度分别在下一个参数或第m个参数中给出,而不是十进制数字字符串,这两个参数的类型必须为int.

票数 125
EN

Stack Overflow用户

发布于 2011-05-09 11:49:58

一个不太知名的函数是asprintf。第一个参数是**char。这个函数会malloc字符串的空格,这样你就不必记账了。记住在完成时对字符串执行free

代码语言:javascript
复制
char *fmt_string;

asprintf(&fmt_string, "%%d %%%ds", SIZE);
printf(fmt_string, number, letters);
free(fmt_string);

是一个使用的例子。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5932214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档