2013-03-04 137 views
3

誰能告訴我這是什麼意思:"%.*s"「%。* s」是什麼意思作爲printf中的格式說明符?

例如,在這裏使用:

sprintf(outv->deliveryAddressCity, 
      "%.*s", 
      sizeof(outv->deliveryAddressCity)-1, 
      mi->deliveryAddressCity); 
+3

http://www.cplusplus.com/reference/cstdio/printf/ – djechlin 2013-03-04 16:03:30

+0

我冒昧地編輯由於代碼不可讀,因此將參數放在sprintf的不同行上。 – Lundin 2013-03-04 16:05:03

+0

和你的重複 - http://stackoverflow.com/questions/5296123/what-does-this-statement-mean-printf-s-int-lengthsi – djechlin 2013-03-04 16:09:08

回答

7

%.*s意味着打印從下面的緩衝字符的第X號。在這種情況下,請打印mi->deliveryAddressCity中的第一個sizeof(outv->deliveryAddressCity) - 1個字符,防止寫入超出outv->deliveryAddressCity的範圍。

較短例如:

printf("%.*s", 4, "hello world"); 

將打印hell

0

這是一個格式說明符,它從堆棧中取2個值,第一個是大小,第二個是值。

的。記法:ATLEAST-length.maxlength(就意味着 「*」:最大*字符)

2

也許你可以用這個例子中得到它:

printf("%.*s", 3, "abcdef"); 

打印 「ABC」 。

1

的寬度和精度格式化參數可以被省略,或他們可以是嵌入在格式字符串的固定數量,或者作爲通過格式字符串中用星號「*」表示的另一個函數參數。例如,printf(「%* d」,5,10)將導致打印出「10」,總寬度爲5個字符,printf(「%。* s」,3,「abcdef」)將導致正在打印「abc」。

(這是很容易找到它的搜索引擎......)

1

時,你有沒有空終止字符串這是最常用的,長度存儲在別處。

例如:

{ 
    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". 
} 
+0

例如當混合C和Fortran,其中空格鍵而不是空終止(yuck)時, – djechlin 2013-03-04 16:08:11

0

它可以幫助您打印字符串的一部分。你可以指定你必須打印字符串的長度。例如:printf(「%。* s」,5,「rahul subedi」) 輸出: rahul

相關問題