在我必须维护的一些代码中,我看到了格式说明符%*s
。谁能告诉我这是什么以及为什么使用它?
其用法示例如下:
fprintf(outFile, "\n%*s", indent, "");
在我必须维护的一些代码中,我看到了格式说明符%*s
。谁能告诉我这是什么以及为什么使用它?
其用法示例如下:
fprintf(outFile, "\n%*s", indent, "");
- 宽度未在格式字符串中指定,而是作为必须格式化的参数之前的附加整数值参数。
所以“缩进”指定为参数列表中跟随它的字符串分配多少空间。
所以,
printf("%*s", 5, "");
是相同的
printf("%5s", "");
这是在文件中放置一些空格,避免循环的好方法。
不要在不是 NULL 终止(打包)的缓冲区上使用“%*s”,认为它只会打印“长度”字段。
格式说明符 %4s 输出一个字段宽度为 4 的字符串,即 printf 显示的值至少有 4 个字符位置。
如果要输出less
的值的宽度超过 4 个字符位置,则默认情况下该值right justified
在字段中。
如果该值greater
的宽度大于 4 个字符位置,则字段宽度expands
以容纳适当数量的字符。
要左对齐值,请使用负整数指定字段宽度。
参考资料:Java™ 如何编程(早期对象),第十版
在 printf 和 fprintf 中使用时:
printf("%*s", 4, myValue); is equivalent to printf("%4s", myValue);
它显示具有最小宽度的变量,其余右对齐空格。要左对齐该值,请使用负整数。
在 scanf 和 sscanf 中使用时:
/* sscanf example */
#include <stdio.h>
int main ()
{
char sentence []="Rudolph is 12 years old";
char str [20];
int i;
sscanf (sentence,"%s %*s %d",str,&i);
printf ("%s -> %d\n",str,i);
return 0;
}
输出:
Rudolph -> 12
它用于忽略字符串。
* 导致 fprintf 填充输出直到它有 n 个字符宽,其中 n 是存储在 a 函数参数中的整数值,就在修改后的类型表示的参数之前。
printf("%*d", 5, 10) //will result in "10" being printed with a width of 5.
http://www.cplusplus.com/reference/clibrary/cstdio/printf/
宽度未在格式字符串中指定,而是作为必须格式化的参数之前的附加整数值参数。
例如:printf("%*s", 4, myValue);
等价于printf("%4s", myValue);
。