这对许多人来说可能是一个非常基本的问题,但我无法理解 什么%。* s在做什么?
void substring(int i, int j, char *ch)
{
printf("The substring is: %.*s\n", j - i, &ch[i]);
//what is %.*s doing?
}
答案 0 :(得分:6)
*
从字符串前面的参数中获取字符串的长度限制。因此printf将输出(最多)j - i
个字符&ch[i]
到stdout
。如果字符串较短,则将打印整个字符串,但不会填充空白字符串。
答案 1 :(得分:4)
以下是printf
的一个很好的参考:http://en.cppreference.com/w/c/io/fprintf。 *
这就是它所说的:
.
后跟整数或*
,指定转换的精度。在使用*
的情况下,精度由类型int
的附加参数指定。如果此参数的值为负,则忽略它。请参阅下表,了解精确度的确切影响。
对于s
,它说:
Precision指定要写入的最大字节数。
因此,在您的情况下,它会打印最多j-i
个字符。
<小时/> *事实上,它是几乎所有标准C和C ++库的非常好的参考。使用它!