对于“C”,当需要自定义填充时,可以使用不需要任何 malloc() 或预格式化的 [s]printf 的替代(更复杂)使用。
诀窍是对 %s 使用 '*' 长度说明符(最小值和最大值),再加上一个用您的填充字符填充到最大潜在长度的字符串。
int targetStrLen = 10; // Target output length
const char *myString="Monkey"; // String for output
const char *padding="#####################################################";
int padLen = targetStrLen - strlen(myString); // Calc Padding length
if(padLen < 0) padLen = 0; // Avoid negative length
printf("[%*.*s%s]", padLen, padLen, padding, myString); // LEFT Padding
printf("[%s%*.*s]", myString, padLen, padLen, padding); // RIGHT Padding
"%*.*s" 可以放在 "%s" 之前或之后,这取决于对 LEFT 或 RIGHT 填充的需要。
[####Monkey] <-- Left padded, "%*.*s%s"
[Monkey####] <-- Right padded, "%s%*.*s"
我发现 PHP printf (这里) 确实支持在 %s 格式中使用单引号 (') 后跟自定义填充字符来提供自定义填充字符的能力。
printf("[%'#10s]\n", $s); // use the custom padding character '#'
产生:
[####monkey]