我想將一個額外參數傳遞給printf
並打印兩次,例如,printf參數兩次
printf("%s%s","somestring"); // prints somestringsomestring
有沒有辦法做到這一點?
我想將一個額外參數傳遞給printf
並打印兩次,例如,printf參數兩次
printf("%s%s","somestring"); // prints somestringsomestring
有沒有辦法做到這一點?
如果你在Linux或其他類UNIX系統,你可以使用$
指定參數編號:
printf("%1$s%1$s\n", "hello");
在這個例子中,1$
表示「使用第一個參數」。我們也多次使用這個語法,所以我們可以多次使用給定的參數。
的Linux man page for printf
提供了更多的細節:
的參數必須與 轉換說明正確對應(式推廣之後)。默認情況下,參數的使用順序爲 ,其中每個'*'和每個轉換說明符都會要求輸入下一個 參數(如果給出的參數數量不夠多,則會出現錯誤) 。通過寫入「%m $」而不是 '%'和'm $'而不是'',人們還可以明確地指定採用哪個參數,在 每個需要參數的地方,其中十進制整數m表示在期望的參數的參數列表中的位置 ,索引 從1開始。因此,
printf("%*d", width, num);
和
printf("%2$*1$d", width, num);
是等價的。第二種風格允許重複參考 相同的論點。 C99標準不包含使用來自單一UNIX規範的'$', 的樣式。如果使用使用'$' 的樣式,則必須始終將所有轉換採用 參數和所有寬度和精度參數進行所有轉換,但可能會將 與不佔用參數的「%%」格式混合使用。使用'$'指定的參數數量可能沒有 間隔;例如,如果指定了參數1和3的 ,則參數2也必須在格式字符串的某處指定爲 。
非常感謝。將接受系統讓我的時間。 – DEADBEEF
每個'man 3 printf'只需註釋一下:「* C99標準不包含使用'$'的樣式,該樣式來自Single UNIX Specification。*」 –
^換句話說,這是一個POSIX擴展 –
https://stackoverflow.com/questions/19327441/gcc-dollar-sign-in-printf-format-string – Barmar
在ISO C中,你需要使用一個變量(或可變參數列表)來保存值,然後在參數列表中指定兩次 –
是否存在實際需要或者這是理論問題? – i486