2013-03-12 70 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++庫都是非常好的參考。用它!