C 如何从format打印固定长度的输出

C 如何从format打印固定长度的输出,c,C,此代码如下: 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(bu

此代码如下:

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:
缓冲区中
;请注意,它在输出中包括
,并且假定字符串
“Test”
)上没有尾随空格。
printf()
操作将字符串左对齐(
-
)的格式设置为(至少)10的长度(在代码的格式和10的参数列表中的<代码> */COD>)到标准输出。大概在同一行上的输出之后会出现其他的东西;否则,空白填充没有明显的点。

有关完整信息,请参阅:

这涵盖了
*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);
}
请注意,如果数字加上字符串太长,此代码将截断格式化数据。如果您稍微努力一点,可以通过以下方法解决此问题(例如在
缓冲区的定义中,将
1
添加到
width
——可以添加15而不是1)

你可以写:

format_item(1, "Test", 10);
或:


等等。

不应该是“Abdul Razzak”?两个步骤:
snprintf()
创建
“1.测试:
,然后
printf(%%-*s,10,buffer);
你有
char buffer[20];
并用
snprintf()
@JonathanLeffler将值格式化为它不能仅用“printf”实现吗?不,因为
sprintf()
snprintf()
将格式化数据写入一个字符串,然后需要它进入标准输出。使用
sprintf()
而不是
snprintf()
,可以分两步完成,但这是危险的。使用问题中的常量,使用
sprintf()足够安全
。在一般情况下,使用
snprintf()
进行溢出保护(并检查它的返回值)。@razzak;阅读。
char *str_var = …some function call, perhaps…
int item = 56;
format_item(++item, str_var, 20);