对许多人来说,这可能是一个非常基本的问题,但我无法理解 %。* s在做什么?了解printf中的表示法
void substring(int i, int j, char *ch)
{
printf("The substring is: %.*s\n", j - i, &ch[i]);
//what is %.*s doing?
}
对许多人来说,这可能是一个非常基本的问题,但我无法理解 %。* s在做什么?了解printf中的表示法
void substring(int i, int j, char *ch)
{
printf("The substring is: %.*s\n", j - i, &ch[i]);
//what is %.*s doing?
}
*
正在从字符串之前的参数取得字符串的长度限制。因此printf将输出(至多)j - i
字符从&ch[i]
到stdout
。如果字符串较短,则将打印整个字符串,但不会填充空白。
以下是printf
的一个很好的参考:http://en.cppreference.com/w/c/io/fprintf。 *
而这正是它说:
.
其次是整数或*
指定转换的精度。在使用*
的情况下,精度由int
类型的附加参数指定。如果这个参数的值是负数,它将被忽略。请参阅下表以了解精确度的确切影响。
而对于s
,它说:
精度指定要写入的字节的最大数量。
所以在你的情况下,它最多打印j-i
个字符。
'。* * *精度未在格式字符串中指定,而是作为必须格式化的参数前面的附加整数值参数。*请参见[printf引用](http://www.cplusplus。 com/reference/cstdio/printf /) – 2013-03-12 17:51:29
绝对可以提出基本的问题,唯一的问题是在问之前,你应该从你身边做一些最小化 – 2013-03-12 18:13:40