0

在这段代码中:

sprint(buf_ptr, "%.*s", MAX_BUF_LEN, desc);

是什么"%.*s",意思?是什么"%20.20s"意思 ?"%.28s"snprintf

4

2 回答 2

2

%*s格式规范中,s表示参数将是(以空结尾的)字符串,而*(宽度说明符)表示字段宽度作为紧接在字符串前面的参数给出。

在您的其他示例中,宽度说明符作为固定值给出。

实际上,在printf您提供的格式中,既有宽度说明符又有精度说明符:宽度是句点之前的值,精度是之后的值。对于字符串,宽度是最小输出字段大小(必要时填充空格),精度是要打印的最大字符数(必要时字符串将被截断)。在任何一种情况下,如果*为任何一种指定了 a,则将假定它位于参数列表中(作为整数),紧挨在它适用的字符串之前。

于 2019-10-03T08:52:14.190 回答
1

“%.*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 字符串是由第一个空字符终止并包括第一个空字符的连续字符序列。

于 2019-10-03T10:07:53.110 回答