簡體   English   中英

如何在C中解釋此printf

[英]How do I interpret this printf in C

我正在閱讀一些代碼,在那里我不得不閱讀printf語句:

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

我建議所有記錄的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個空格。 這里需要4個填充空格,因為字符串""長度為0。最終結果:打印了4個空格。

"%s"

該指令也是一個字符串轉換規范,它使用下一個參數buf ,假設它是char * ,並輸出其內容。 不清楚OP是否表示全為 0,如果是,則不打印任何內容。

"\\n"

該最終指令僅是文本,因此將打印"\\n"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM