2013-03-12 75 views
1

对许多人来说,这可能是一个非常基本的问题,但我无法理解 %。* s在做什么?了解printf中的表示法

void substring(int i, int j, char *ch) 
{ 
     printf("The substring is: %.*s\n", j - i, &ch[i]); 
     //what is %.*s doing? 
} 
+1

'。* * *精度未在格式字符串中指定,而是作为必须格式化的参数前面的附加整数值参数。*请参见[printf引用](http://www.cplusplus。 com/reference/cstdio/printf /) – 2013-03-12 17:51:29

+1

绝对可以提出基本的问题,唯一的问题是在问之前,你应该从你身边做一些最小化 – 2013-03-12 18:13:40

回答

6

*正在从字符串之前的参数取得字符串的长度限制。因此printf将输出(至多)j - i字符从&ch[i]stdout。如果字符串较短,则将打印整个字符串,但不会填充空白。

4

以下是printf的一个很好的参考:http://en.cppreference.com/w/c/io/fprintf*

而这正是它说:

.其次是整数或*指定转换的精度。在使用*的情况下,精度由int类型的附加参数指定。如果这个参数的值是负数,它将被忽略。请参阅下表以了解精确度的确切影响。

而对于s,它说:

精度指定要写入的字节的最大数量。

所以在你的情况下,它最多打印j-i个字符。


*实际上,它对于几乎所有的标准C和C++库都是非常好的参考。用它!