我需要在字符串之前添加变量空间填充。这是代码:
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=]
如何解决这个问题?有没有解决方法呢?
答案 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
所以,如果你考虑一下,你可以这样做:
printf("%*s\n", spaces, "foo");
为什么Alexis的版本是评论中您的版本的同义词?
因为编译器将两个连续字符串(即两者之间的空格)连接成一个。
此操作称为字符串文字串联。阅读Wikipedia中的更多内容。