2013-08-12 52 views
0

我經歷了一些代碼,我就死讀一printf語句解釋這個printf的:如何用C

printf("%*s%s\n", stat[type].dent, "", buf); 

states[type].indent是一個數字,它等於4 buf是215個字節的緩衝區0作爲字符串進入,但不知道""%*s是爲了。

有人能幫我讀這個printf聲明嗎?

+2

您可以通過閱讀printf上的文檔來解釋它。 –

+0

只有5個答案?這是如此低的掛果,當然我們可以獲得更多。 (我,我投票結束。) –

+1

你爲什麼不嘗試呢?寫一個exmaple代碼:'for(i = 0; i <5; i ++)printf(「%* s%s \ n」,i,「」,「Amit Singh Tomar」);'並檢查其輸出 –

回答

2

格式代碼"%*s"中的*告訴printf下一個參數是一個字段寬度,後跟正常參數(本例中爲字符串)。

它與例如"%4s"你的情況,但寬度可以在運行時設置。

所以這裏stat[type].dent是字段寬度,空字符串是字符串。因此,這會打印出4個字符寬度的空字符串(因此您可以得到四個空格),然後是buf中的所有字符。

我推薦一個很好的reference on printf這裏都有記錄。

2

*表示要打印的參數的寬度取決於其前面的(整數)參數。

cplusplus來自:

printf ("Width trick: %*d \n", 5, 10); // 5 is the width, 10 is the integer being printed 
1

%*s是一個字符串轉換。 *部分意味着該字段的寬度將作爲參數提供(這就是stat[type].dent的使用方式)。所以它以某個指定的寬度打印一個空字符串(稱之爲N)。換句話說,在打印出buf之前,它會留下N個空格。

+0

這是唯一的答案,很難說......甚至想想......這是什麼確實如此,它是爲了什麼。 –

0

*將被值stat[type].dent取代,這是一個數字,將被稱爲最小字段寬度。

0

它是一個精度,它指定了字符串轉換的最大字節數。

星號(*)使用整數參數,它指定要使用的值(用於精度)。

要打印可變長度的字符串,請指定printf("%*s", l, string)。用l代替星號。

0

"%*s%s\n"是一種格式,其中包含3條指令

"%*s"

這個指令是字符串轉換規範。 *會導致字段寬度int根據格式之後的下一個參數確定。正如OP提到的,這是來自stat[type].dent的4的值。 s轉換規範然後獲取下一個參數("")並將其視爲指向char *,它是。因此printf()打印出"",根據需要首先預先填充空格,最多爲4。由於""的字符串長度爲0,因此需要4個填充空格。淨結果:打印4個空格。

"%s"

此指令,也字符串轉換說明書中,將在下次參數,buf,假設它是一個char *,它是,並打印其內容進行。如果OP表示它是全部 0,則不清楚,如果是,則不打印任何內容。

"\n"

該最終指令是簡單的文本,因此"\n"被打印。