printf中的空格填充不起作用

时间:2014-10-06 23:51:27

标签: c printf

我需要在字符串之前添加变量空间填充。这是代码:

unsigned int spaces = result % 16;
printf("spaces=%d\n", spaces); // spaces=12, for example.
printf("% *s\n", spaces, my_string);

它根本不起作用 - 没有添加空格,我在gcc中收到警告:

warning: ' ' flag used with ‘%s’ gnu_printf format [-Wformat=]

如何解决这个问题?有没有解决方法呢?

1 个答案:

答案 0 :(得分:2)

更改此

printf("% *s\n", spaces, my_string);

到这个

printf("%*s%s\n", spaces, " ", my_string);

这应该消除警告并产生预期的效果。

[编辑]

我现在看到你找到了答案。亚历克西斯所说的也是正确的,并会产生同样的效果。我想说亚历克西斯的版本更清晰,所以我给出的是一个解决方案,但是这些信用在他身上。

您也可以这样做:

int width = 5;
printf ("%*d%*d\n", width, 10, width, 12);

将打印出来:

10 12

Source

所以,如果你考虑一下,你可以这样做:

printf("%*s\n", spaces, "foo");


为什么Alexis的版本是评论中您的版本的同义词?

因为编译器将两个连续字符串(即两者之间的空格)连接成一个。

此操作称为字符串文字串联。阅读Wikipedia中的更多内容。