[英]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
聲明嗎?
*
表示要打印的參數的寬度取決於其前面的(整數)參數。
來自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.