【发布时间】:2010-11-03 06:54:03
【问题描述】:
在我必须维护的一些代码中,我看到了格式说明符 %*s 。谁能告诉我这是什么以及为什么使用它?
其用法示例如下:
fprintf(outFile, "\n%*s", indent, "");
【问题讨论】:
-
重要的是
indent的提升类型是int。
标签: c printf format-specifiers
在我必须维护的一些代码中,我看到了格式说明符 %*s 。谁能告诉我这是什么以及为什么使用它?
其用法示例如下:
fprintf(outFile, "\n%*s", indent, "");
【问题讨论】:
indent 的提升类型是int。
标签: c printf format-specifiers
在 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
用于忽略字符串。
【讨论】:
sscanf(), "%s" 比 gets() 差,因为它没有宽度限制。
格式说明符 %4s 输出一个字段宽度为 4 的字符串,即 printf 显示的值至少包含 4 个字符位置。
如果要输出的值是less而不是4个字符位置宽,则字段中默认值为right justified。
如果值是greater 比4 个字符位置宽,则字段宽度expands 以容纳适当数量的字符。
要使值左对齐,请使用负整数指定字段宽度。
【讨论】:
不要在非 NULL 终止(打包)的缓冲区上使用“%*s”,以为它只会打印“长度”字段。
【讨论】:
%.*s 表示您正在从参数读取precision 值,精度是要打印的最大字符数,%*s 您正在读取width参数中的值,这是要打印的最小 os 字符数。
It's used to specify, in a dynamic way, what the width of the field is:
- 格式字符串中没有指定宽度,而是作为附加 前面的整数值参数 必须格式化的参数。
所以“缩进”指定为参数列表中跟在它后面的字符串分配多少空间。
所以,
printf("%*s", 5, "");
和
一样printf("%5s", "");
这是在文件中放置一些空格以避免循环的好方法。
【讨论】:
printf("[%*s]\n", -10, "hello") 将输出“[hello ]”,而不是使用+10(或10)会得到的“[ hello]”。
http://www.cplusplus.com/reference/clibrary/cstdio/printf/
宽度没有在格式字符串中指定,而是作为必须格式化的参数之前的附加整数值参数。
例如:printf("%*s", 4, myValue); 等价于 printf("%4s", myValue);。
【讨论】:
* 使 fprintf 填充输出直到它有 n 个字符宽,其中 n 是存储在 a 函数参数中的整数值,就在修改后的类型表示的参数之前。
printf("%*d", 5, 10) //will result in "10" being printed with a width of 5.
【讨论】: