我希望能够在运行时使用printf()
填充0个或更多空间
我提出的解决方案如下:
printf("%.*cord", pad_len, 'w');
printf("%.*s", pad_len, "word");
printf("%.*sword", pad_len, "");
我最喜欢第三种方法,因为它不依赖于硬编码文字,所以我希望得到确认.具体地说,无论它是否调用任何UB,或者具有任何影响其跨平台生存能力的实现定义的方面.
我希望能够在运行时使用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尚未规定的更高水平的目标.