2023年7月23日,周日上午:
遇到的问题
今天早上看Linux编程方面的书籍时,遇到了类似下面的代码,把我给整蒙了
“%.*s”是啥???怎么后面还能跟两个参数呢???
int n = 5;
char line[] = "Hello, World!";
printf("%.*s", n, line);
常见的格式化指令
%d
:用于打印有符号的十进制整数。%u
:用于打印无符号的十进制整数。%f
:用于打印浮点数。%c
:用于打印字符。%s
:用于打印字符串。%p
:用于打印指针地址。%x
:用于打印十六进制整数(小写字母)。%X
:用于打印十六进制整数(大写字母)。%o
:用于打印八进制整数。%e
:用于打印科学计数法表示的浮点数(小写字母)。%E
:用于打印科学计数法表示的浮点数(大写字母)。%g
:用于打印浮点数,根据数值的大小选择%f
或%e
表示法。%G
:用于打印浮点数,根据数值的大小选择%f
或%E
表示法。%%
:用于打印百分号。
常见的格式化指令的修饰符
-
*
:用于将一个整数参数与指令关联起来。其中*
表示参数的位置,表示要从可变参数列表中获取一个整数值作为修饰符的参数。例如,%*d
表示将下一个参数作为整数字段的宽度。 -
0
:用于指定用零填充字段的宽度。例如,%05d
表示将整数字段填充为五位宽度,不足的位置用零填充。 -
-
:用于左对齐字段。例如,%-10s
表示将字符串字段左对齐,并占用十个字符的宽度。 -
+
:用于在正数前面显示加号。例如,%+d
表示在正整数前面显示一个加号,负数仍会显示负号。 -
.
:用于指定浮点数的精度或字符串的最大长度。例如,%.2f
表示浮点数字段保留两位小数。
解答
int n = 5;
char line[] = "Hello, World!";
printf("%.*s", n, line);
其中的"%.*s",其实就是:
将一个指定长度的字符串打印到输出流中。具体的字符串长度由传递给 printf
函数的可变参数列表中的第一个整数参数n决定,并用这个整数参数n替代"%.*s"中的“*”号,得到"%.5s",也就是输出长度为5的字符串。