我經歷了一些代碼,我就死讀一printf語句解釋這個printf的:如何用C
printf("%*s%s\n", stat[type].dent, "", buf);
states[type].indent
是一個數字,它等於4 buf
是215個字節的緩衝區0作爲字符串進入,但不知道""
和%*s
是爲了。
有人能幫我讀這個printf
聲明嗎?
我經歷了一些代碼,我就死讀一printf語句解釋這個printf的:如何用C
printf("%*s%s\n", stat[type].dent, "", buf);
states[type].indent
是一個數字,它等於4 buf
是215個字節的緩衝區0作爲字符串進入,但不知道""
和%*s
是爲了。
有人能幫我讀這個printf
聲明嗎?
格式代碼"%*s"
中的*
告訴printf
下一個參數是一個字段寬度,後跟正常參數(本例中爲字符串)。
它與例如"%4s"
你的情況,但寬度可以在運行時設置。
所以這裏stat[type].dent
是字段寬度,空字符串是字符串。因此,這會打印出4個字符寬度的空字符串(因此您可以得到四個空格),然後是buf
中的所有字符。
我推薦一個很好的reference on printf
這裏都有記錄。
*
表示要打印的參數的寬度取決於其前面的(整數)參數。
cplusplus來自:
printf ("Width trick: %*d \n", 5, 10); // 5 is the width, 10 is the integer being printed
的%*s
是一個字符串轉換。 *
部分意味着該字段的寬度將作爲參數提供(這就是stat[type].dent
的使用方式)。所以它以某個指定的寬度打印一個空字符串(稱之爲N)。換句話說,在打印出buf
之前,它會留下N個空格。
這是唯一的答案,很難說......甚至想想......這是什麼確實如此,它是爲了什麼。 –
*
將被值stat[type].dent
取代,這是一個數字,將被稱爲最小字段寬度。
它是一個精度,它指定了字符串轉換的最大字節數。
星號(*)使用整數參數,它指定要使用的值(用於精度)。
要打印可變長度的字符串,請指定printf("%*s", l, string)
。用l
代替星號。
"%*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"
被打印。
您可以通過閱讀printf上的文檔來解釋它。 –
只有5個答案?這是如此低的掛果,當然我們可以獲得更多。 (我,我投票結束。) –
你爲什麼不嘗試呢?寫一個exmaple代碼:'for(i = 0; i <5; i ++)printf(「%* s%s \ n」,i,「」,「Amit Singh Tomar」);'並檢查其輸出 –