[英]How to printf a fixed length output from format
以下代码:
printf("%d. %-10s:", 1, "Test");
产生这个输出:
1. Test :// 14 characters long
我想要整个格式`%d的输出长度。 %-10s:“正好是这样的10个字符:
1. Test: // 10 characters
注意:
数字长度不一,可能是1或100,所以我无法从输出中推断它的长度。
我怎样才能做到这一点?
您需要使用两个步骤:
char buffer[20];
snprintf(buffer, sizeof(buffer), "%d. %s:", 1, "Test");
printf("%-*s", 10, buffer);
snprintf()
操作给你一个字符串1. Test:
在buffer
; 请注意,它包含:
在输出中,并假定字符串"Test"
上没有尾随空白。 printf()
操作将字符串左对齐( -
)格式化为(至少)10(格式中的*
和参数列表中的10)的长度到标准输出。 据推测,在同一行输出后会出现其他内容; 否则,空白填充没有明显的意义。
有关完整信息,请参阅:
这包括*printf()
系列函数的基本操作(但不列出v*printf()
或*wprintf()
函数族的接口)。
问题和上面答案中的代码都是用常量完成的。 更现实的情况是:
void format_item(int number, const char *text, int width)
{
char buffer[width+1]; // C99 VLA
snprintf(buffer, sizeof(buffer), "%d. %s:", number, text);
printf("%-*s", width, buffer);
}
请注意,如果数字加上字符串太长,此代码会截断格式化数据。 如果你的工作有点困难(比如在buffer
的定义中添加超过1
的width
- 可能会增加15而不是1)。
你可以写:
format_item(1, "Test", 10);
要么:
char *str_var = …some function call, perhaps…
int item = 56;
format_item(++item, str_var, 20);
等等
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.