1

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

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

2 回答 2

6

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

于 2013-03-12T17:50:01.690 回答
4

这是一个很好的参考printfhttp ://en.cppreference.com/w/c/io/fprintf 。*

这就是它所说的:

.后跟整数或*指定转换的精度。在使用 when 的情况下*,精度由 type 的附加参数指定int。如果此参数的值为负,则将其忽略。有关精度的确切影响,请参见下表。

对于s,它说:

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

因此,在您的情况下,它最多打印j-i字符。


* 事实上,它是几乎所有标准 C 和 C++ 库的一个很好的参考。用它!

于 2013-03-12T17:50:05.757 回答