我刚刚阅读了经典的K& R并遇到了以下语法:
printf("%.*s",max,s);
这里"."
的含义是什么?当我在这里不应用"."
时,会打印整个字符串,但是当我们不应用"."
时,打印最多字符。如果有人能解释清楚,我将非常感激。
答案 0 :(得分:11)
在%.*s
中,.*
限制了要写入的字节数。如果这是用包含数字写的,例如%.34s
,则数字将是限制。使用星号时,限制取自相应参数printf
。
来自C 2011(N1570)7.21.6.1 4,描述fprintf
等的转换规范:
一个可选的精度,它给出了 s 转换要写入的最大字节数。精度采用句点(。)的形式,后跟星号 * (稍后描述)或可选的十进制整数;如果只指定了句点,则精度为零。
答案 1 :(得分:11)
它指定“字符串最大字段宽度”
字符串格式中的精度指定最大字段宽度:
%2.6s
指定最小宽度为2,最大宽度为6个字符。如果字符串大于6个字符,则会被截断。
答案 2 :(得分:4)
printf格式字符串允许指定宽度和精度。
宽度(例如%25s
)告诉printf
将字符串填充为25个字符的宽度,在字符串之前插入空格。 (如果字符串超过25个字符,则仍然完整打印。)
应用于字符串格式的“精度”(例如%.25s
)将打印字符串的长度限制为25个字符。完整打印3个字符的字符串(没有填充),30个字符的字符串将丢失其最后5个字符。
%.*s
避免对格式中的精度进行硬编码,而是将printf
指定为max
的整数参数。
答案 3 :(得分:2)
首先,K& R是C的原始实现,它与当前规范不同。如果您需要有关K& R C的具体信息,请参阅具体文档。
从目前的C标准来看:
一个可选的精度,它给出(...)要为s转换写入的最大字节数。精度采用句点(。)的形式,后跟星号*(稍后描述)或可选的十进制整数。
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
类似的文档可在线到处获得多种标准或实施:
答案 4 :(得分:1)
Dot具有不同的格式字符串含义。如果你使用带有%f的a.b,那么b给出长度。 a给出小数点数。如果你使用带有%s的a.b,则a将给出字符串的最小长度。而b给出了将要打印的字符串的最大长度。
答案 5 :(得分:0)
它实际上根据传递给 printf 的函数以有限数量和命令格式打印字符,在这种情况下它应该打印“max”的具体内容