我希望能够在运行时使用printf()填充0个或更多空间

我提出的解决方案如下:

printf("%.*cord", pad_len, 'w');  
printf("%.*s", pad_len, "word");  
printf("%.*sword", pad_len, "");

我最喜欢第三种方法,因为它不依赖于硬编码文字,所以我希望得到确认.具体地说,无论它是否调用任何UB,或者具有任何影响其跨平台生存能力的实现定义的方面.

推荐答案

在printf()中用%.*S格式填充长度为0的字符串是否会调用任何UB?

不是的.用"%.*S"格式填充长度为0的string是可以的.

Of the following:
The first is UB as "%c" is not specified to allow a precision.
The other 2 are OK:

int pad_len = 0;
printf("%.*cord", pad_len, 'w');  // UB
printf("%.*s", pad_len, "word");  
printf("%.*sword", pad_len, "");

什么是最好的(或其他方法)取决于OP尚未规定的更高水平的目标.

C++相关问答推荐

在x86汇编中,为什么当分子来自RDRAND时DIV会引发异常?

找出文件是否包含给定的文件签名

如何在C宏中确定Windows主目录?

为什么在Linux(特别是Ubuntu 20.04LTS)上,POSIX共享内存对象在重启后仍然存在,然后突然变成了根用户?

当execvp在C函数中失败时杀死子进程

如何使fputs功能提示错误输入并要求用户重新输入.程序停止而不是请求新的输入

LibpCap禁用监视器模式(C、MacOS)

双指针指向常量双指针的指针类型赋值不兼容

在我的代码中,我需要在哪里编写输出函数?

在C语言中,是否可以使枚举数向后计数?

从uint8_t*转换为char*可接受

在vfork()之后,链接器如何在不 destruct 父内存的情况下解析execve()?

CS50判断灯泡运动的问题,判断时多出一个灯泡,但不在终端上

如何在c中使用具有不同变量类型的内存分配?

安全倒计时循环

条件跳转或移动取决于未初始化值(S)/未初始化值由堆分配创建(Realloc)

程序对大输入给出错误答案

如何在Rust中处理C的longjmp情况?

为什么程序在打印每个数字之前要等待所有输入?

C语言程序流程解释