首页 > 解决方案 > 有没有办法使用 sprintf 填充包含格式化元素的 char 数组?

问题描述

所以我使用 sprintf 来生成一个格式化的 char[] 来显示日期。

sprintf(lcdContent_line1, "%02d/%02d/%04d", month, day, year);

但我也想让整个结果右填充空格,总长度为 20 个字符。我试过了:

sprintf(lcdContent_line1, "%-20s", lcdContent_line1);

但这只会破坏整个事情。有没有办法编写格式字符串,以便我可以正确填充整个内容?

编辑:

大声笑简单的解决方案:

memset(lcdContent_line1, 0, 20);
sprintf(lcdContent_line1, "%02d/%02d/%04d", month, day, year);
sprintf(lcdContent_line1, "%-19s", lcdContent_line1);

原来我用 %-20s 超出了缓冲区,因为那是整个长度,你必须为 0 留出空间。>。<

编辑2:

感谢@chux 指出这实际上是一个糟糕的解决方案,它无权像它一样工作。未定义的行为地狱是一个真实的地方,你将在第一个反抗迹象时被派去。

标签: c++c

解决方案


我的提议

int whatYouWant = 10 circa about;
sprintf(lcdContent_line1, "%02d/%02d/%04d%*c", month, day, year, whatYouWant, ' ');

更新:文档链接:https ://linux.die.net/man/3/sprintf ,这里是例子

printf("%*d", width, num);

推荐阅读