c++ - 有没有办法使用 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 指出这实际上是一个糟糕的解决方案,它无权像它一样工作。未定义的行为地狱是一个真实的地方,你将在第一个反抗迹象时被派去。
解决方案
我的提议
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);
推荐阅读
- android - 如何在使用 Android 和 Kotlin 的 jetpack compose 中使用签名板库?
- laravel - 如何使用绑定设置 Eloquent 模型属性值?
- c# - 我的 Microsoft Graph 订阅中有几个 page.count
- fetch - 没有使用 GWS 的 API 的 JS 的 API 文档
- python - 网页抓取时包含伪元素
- c# - .NET 5 API 和 React UI 身份验证使用 Azure AD B2C - Bearer error="invalid_token", error_description="签名无效"
- ruby-on-rails - 在使用正则表达式查询之前从 Postgres DB 中的字段中删除标点符号
- nginx - WSL2 - Magento 2.4-Nginx - Css 和 Js 问题
- pygame - 有没有正确的方法在pygame中实现游戏结束并重新启动屏幕?
- grok - Grok 模式可能会关闭 - 任何建议将不胜感激