2011-03-14 47 views
3

我正在讀當前頁 http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-row.html 存在從一個代碼行這個說法是什麼意思?的printf( 「[%。* S]」,(int)的長度[I],

printf("[%.*s] ", (int) lengths[i], 
       row[i] ? row[i] : "NULL"); 

MYSQL_ROW row; 
unsigned int num_fields; 
unsigned int i; 

num_fields = mysql_num_fields(result); 
while ((row = mysql_fetch_row(result))) 
{ 
    unsigned long *lengths; 
    lengths = mysql_fetch_lengths(result); 
    for(i = 0; i < num_fields; i++) 
    { 
     printf("[%.*s] ", (int) lengths[i], 
       row[i] ? row[i] : "NULL"); 
    } 
    printf("\n"); 

}

是什麼​​在該代碼是什麼意思?

+2

手冊頁的哪一部分讓你感到困惑? – 2011-03-14 08:09:05

+0

只有這個代碼[%。* s]。它真的在做什麼? – 2011-03-14 08:10:02

+1

它的功能就像手冊頁描述的那樣。 – 2011-03-14 08:10:39

回答

7

​​是printf格式字符串含義:

  • 第一個參數應該是一個整數(指定要打印的字符串的最大長度)。
  • 第二個參數應該是字符串本身。
  • [](和尾部空白)按原樣傳送。

通常情況下,你會看到類似於.7s這意味着一個7個字符的字符串。長度的使用*意味着從給定的參數中採用它。

那麼該整行所做的是打印一個字符串,其長度在lengths[i]被找到,並且其中的值是row[i](除非row[i]是NULL,在這種情況下,它使用文字串"NULL")。

+2

不包括方括號。這些只是文字方括號。 – 2011-03-14 08:14:30

+1

@Ignacio他就是這樣說的:「按原樣轉移」 – 2011-03-14 17:22:09

+1

@Jim:在評論他的答案之前寫了這條評論。 – 2011-03-14 17:26:53

1

%.*s是輸出格式字符串。

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL"); 

具體地,在這種情況下,它的意思是具有最大的lengths[i]字符打印的第二個參數(的row[i]內容或「NULL」如果row[i]內容評估爲假)。方括號不是格式化的一部分,它們自己打印

0

​​部分是printf的格式字符串。

它指定printf()應輸出字符串(row[i]),但應限制輸出爲由參數(length[i])指定的長度。輸出字符串包含在方括號內。

有關格式化字符串的更多信息,請參閱printf()文檔。