我正在阅读经典的K&R,并遇到以下语法:
printf("%.*s",max,s);
这里的
"."
代表什么意思?如果我不使用"."
,则会打印整个字符串,但当我们不使用"."
时,最多只会打印最大字符数。如果有人能解释一下,我将非常感激。我正在阅读经典的K&R,并遇到以下语法:
printf("%.*s",max,s);
"."
代表什么意思?如果我不使用"."
,则会打印整个字符串,但当我们不使用"."
时,最多只会打印最大字符数。如果有人能解释一下,我将非常感激。%.*s
中,.*
限制了将要写入的字节数。如果使用数字编写,例如%.34s
,那么数字就是限制。当使用星号时,限制来自于printf
的相应参数。fprintf
et al 的转换说明:%.*s
中,部分 .*
限制了……”,否则读起来会有些困难。 - Veltas.*
之前插入了“the”。关于数字和数值,整数和数字都是数学对象。数字是指表示数字的符号(特别是数字字符串)。所以,“34”是数字,但不是数值,就像“狼”是词语,但不是动物一样。 - Eric Postpischil它指定了“字符串最大字段宽度”。
字符串格式中的精度指定了最大字段宽度:
%2.6s
指定最小宽度为2,最大宽度为6个字符。如果字符串超过6个字符,则会被截断。
printf格式化字符串允许指定宽度和精度。
宽度,例如%25s
,告诉printf
将字符串填充到25个字符的宽度,在字符串前插入空格。(如果字符串宽度大于25个字符,则仍会完整打印。)
应用于字符串格式的“精度”,例如%.25s
,将打印的字符串长度限制为25个字符。一个3个字符的字符串将被完全打印(没有填充),而一个30个字符的字符串将缺少其最后5个字符。
%.*s
避免在格式中硬编码精度,而是将其作为整数参数指定给printf
,在您的情况下为max
。
%.25s
,你知道你需要25个字符的精度。当你写%.*s
时,你在运行时才确定精度。我会尝试澄清答案。 - user4815162342使用不同的格式字符串时,点号具有不同的含义。如果在%f中使用a.b,则b表示长度,a表示小数点位数。如果在%s中使用a.b,则a表示字符串的最小长度,而b表示将被打印的字符串的最大长度。
根据传递给printf函数的参数,它实际上以限定数量和指定格式打印字符。在这种情况下,它应该打印出"max"的具体内容。
printf
的部分非常易读。 - DCoder