在这段代码中:
sprint(buf_ptr, "%.*s", MAX_BUF_LEN, desc);
是什么"%.*s",
意思?是什么"%20.20s"
意思 ?"%.28s"
snprintf
在%*s
格式规范中,s
表示参数将是(以空结尾的)字符串,而*
(宽度说明符)表示字段宽度作为紧接在字符串前面的参数给出。
在您的其他示例中,宽度说明符作为固定值给出。
实际上,在printf
您提供的格式中,既有宽度说明符又有精度说明符:宽度是句点之前的值,精度是之后的值。对于字符串,宽度是最小输出字段大小(必要时填充空格),精度是要打印的最大字符数(必要时字符串将被截断)。在任何一种情况下,如果*
为任何一种指定了 a,则将假定它位于参数列表中(作为整数),紧挨在它适用的字符串之前。
“%.*s”是什么意思?
desc
下面是一个字符指针,不需要指向字符串1。打印将继续,直到打印MAX_BUF_LEN
章程(精度)或读取空字符- 以先到者为准。
sprint(buf_ptr, "%.*s", MAX_BUF_LEN, desc);
snprintf 中的 "%20.20s" ... 是什么意思?
为了清楚起见,让我们使用两个不同的值:"%19.21s"
.
desc
是一个不必是字符串的字符指针。打印将继续,直到打印章程或读取空字符- 以先到者为准。如果要打印的章程数量少于 19 个(最小宽度),请在左侧填充空格以使总字符数至少为 19 个。21
sprint(buf_ptr, "%19.21s", desc);
... "%.28s" 在 snprintf 中是什么意思?
就像sprint(buf_ptr, "%.*s", 28, desc);
粗略地说,想想"%minimum.maximum s"
1 字符串是由第一个空字符终止并包括第一个空字符的连续字符序列。