我需要维护一些代码,在其中看到了格式说明符%*s
。请问这是什么,为什么要使用它?
其用法的示例如下:
fprintf(outFile, "\n%*s", indent, "");
我需要维护一些代码,在其中看到了格式说明符%*s
。请问这是什么,为什么要使用它?
其用法的示例如下:
fprintf(outFile, "\n%*s", indent, "");
- 宽度不是在格式字符串中指定的,而是作为一个额外的整数值参数在需要格式化的参数之前指定。
因此,“缩进”指定要为其后面的字符串在参数列表中分配多少空间。
所以,
printf("%*s", 5, "");
与
相同。printf("%5s", "");
这是一种不需要使用循环,便可在文件中添加一些空格的好方法。
printf("[%*s]\n", -10, "hello")
将输出 "[hello ]
" 而不是 "[ hello]
",如果您使用 +10
(或 10
)则会得到后者。 - Jonathan Leffler不要在一个没有以NULL结尾的缓冲区(压缩)上使用"%*s",认为它只会打印“长度”字段。
%.*s
表示您正在从参数中读取 precision
值,而精度是要打印的最大字符数,而 %*s
您正在从参数中读取 width
值,它是要打印的最小字符数。 - Vargas在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 字符宽度。
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);
。