理解printf中的符号

时间:2013-03-12 17:47:46

标签: c

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

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

2 个答案:

答案 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 ++库的非常好的参考。使用它!