printf 的 "precision" 说明符的类型是什么?
What's the type of the "precision" specifier for printf?
假设我使用以下 printf()
说明符字符串:
printf("%.*s", length, str);
要求 printf()
到 print the first length
characters in str
。问题是 length
有哪种类型?我在文档中只看到 整数 的简短提及。
所以看起来是int
。然后看起来当字符串很长时我不能使用以下代码:
const char* startOfString = ...
const char* middleOfString = ...
printf("%.*s", (int)( middleOfString - startOfString ), startOfString);
看来我不能用这种方式输出超过 INT_MAX
个字符。
那么精度是哪种类型?是 int
还是 size_t
还是其他?
它是一个 int
,这样你不能打印超过 INT_MAX
个字符。
来自 C 标准,§ 7.21.6.1,段落。 5:
a field width, or precision, or both, may be indicated by an asterisk. In
this case, an int
argument supplies the field width or precision.
假设我使用以下 printf()
说明符字符串:
printf("%.*s", length, str);
要求 printf()
到 print the first length
characters in str
。问题是 length
有哪种类型?我在文档中只看到 整数 的简短提及。
所以看起来是int
。然后看起来当字符串很长时我不能使用以下代码:
const char* startOfString = ...
const char* middleOfString = ...
printf("%.*s", (int)( middleOfString - startOfString ), startOfString);
看来我不能用这种方式输出超过 INT_MAX
个字符。
那么精度是哪种类型?是 int
还是 size_t
还是其他?
它是一个 int
,这样你不能打印超过 INT_MAX
个字符。
来自 C 标准,§ 7.21.6.1,段落。 5:
a field width, or precision, or both, may be indicated by an asterisk. In this case, an
int
argument supplies the field width or precision.