誰能告訴我這是什麼意思:"%.*s"
「%。* s」是什麼意思作爲printf中的格式說明符?
例如,在這裏使用:
sprintf(outv->deliveryAddressCity,
"%.*s",
sizeof(outv->deliveryAddressCity)-1,
mi->deliveryAddressCity);
誰能告訴我這是什麼意思:"%.*s"
「%。* s」是什麼意思作爲printf中的格式說明符?
例如,在這裏使用:
sprintf(outv->deliveryAddressCity,
"%.*s",
sizeof(outv->deliveryAddressCity)-1,
mi->deliveryAddressCity);
%.*s
意味着打印從下面的緩衝字符的第X號。在這種情況下,請打印mi->deliveryAddressCity
中的第一個sizeof(outv->deliveryAddressCity) - 1
個字符,防止寫入超出outv->deliveryAddressCity
的範圍。
較短例如:
printf("%.*s", 4, "hello world");
將打印hell
。
這是一個格式說明符,它從堆棧中取2個值,第一個是大小,第二個是值。
的。記法:ATLEAST-length.maxlength(就意味着 「*」:最大*字符)
也許你可以用這個例子中得到它:
printf("%.*s", 3, "abcdef");
打印 「ABC」 。
所以你的情況的字符串的大小是sizeof(outv->deliveryAddressCity )-1
的寬度和精度格式化參數可以被省略,或他們可以是嵌入在格式字符串的固定數量,或者作爲通過格式字符串中用星號「*」表示的另一個函數參數。例如,printf(「%* d」,5,10)將導致打印出「10」,總寬度爲5個字符,printf(「%。* s」,3,「abcdef」)將導致正在打印「abc」。
(這是很容易找到它的搜索引擎......)
時,你有沒有空終止字符串這是最常用的,長度存儲在別處。
例如:
{
char* regular_string = "Hello World"; // This string has a null-Terminator.
char untermed_string[11];
int len;
// Specifically make untermed string so it is NOT null-terminated.
memcpy(untermed_string, regular_string, 11);
len = 11;
printf("The string is %.*s\n", len, untermed_string); // This will still print the proper data!
printf("The start of the string is %.*s\n", 5, untermed_string); // This will only print "Hello".
}
例如當混合C和Fortran,其中空格鍵而不是空終止(yuck)時, – djechlin 2013-03-04 16:08:11
它可以幫助您打印字符串的一部分。你可以指定你必須打印字符串的長度。例如:printf(「%。* s」,5,「rahul subedi」) 輸出: rahul
http://www.cplusplus.com/reference/cstdio/printf/ – djechlin 2013-03-04 16:03:30
我冒昧地編輯由於代碼不可讀,因此將參數放在sprintf的不同行上。 – Lundin 2013-03-04 16:05:03
和你的重複 - http://stackoverflow.com/questions/5296123/what-does-this-statement-mean-printf-s-int-lengthsi – djechlin 2013-03-04 16:09:08