繁体   English   中英

如何从格式打印固定长度的输出

[英]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的定义中添加超过1width - 可能会增加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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM