2012-10-15 84 views
-1

我有這樣的字符串。如何打印此字符串

char array1[250] = {"Array Values are %d,%d,%d,%d"}; 

而且我有四個整數這樣,

int var1 = 25,var2 = 78, var3 = -189,var4 = -200; 

我想打印VAR1到VAR4在陣列1。我怎麼做?我已經有了array1本身的格式說明符。

+1

'strlen(「Array Values is 25,78,-189,-200」)== 32';因此你的數組需要是33個字節或更大,這樣纔能有效。 – nneonneo

+2

回覆此問題的一些答案:從http://pubs.opengroup.org/onlinepubs/9699919799/functions/sprintf.html:「如果複製發生在因sprintf調用而重疊的對象之間()或snprintf(),結果是不確定的。「 –

回答

0

sprintf(array1, array1, var1, var2, var3, var4);

它。不過,我不確定C會同時對同一個字符串進行讀寫操作的反應如何,強烈建議先將它複製到一個單獨的變量中。

編輯:Per Roddy的評論我只想說不要做你所要求做的。格式說明符應該與數據分離,我很積極的使用這個應用程序可以節省25個字節的設計。

+1

我99%確定它*無法工作,因爲sprintf不會生成格式字符串的臨時副本。如果給出示例值,它也會寫入數組的末尾,並且 - 只是將其封閉 - 文字字符串可能會存儲在只讀內存部分。 – Roddy

+0

@Roddy:它被分配給一個char數組,所以文字不是問題。你提到的其他一切都是。 – nneonneo

+0

您有重疊=>未定義的行爲。 – ouah

0

只需使用sprintf

但創建另一個輸出數組,還是因爲你覆蓋格式字符串中,將有不確定的操作。

char output[126]; 

sprintf(output, array1, var1, var2, var3, var4); 
+1

您有重疊=>未定義的行爲。 – ouah

2

不要將格式說明符放在數組中。只是做

char array1[128]; // enough space for four ints and the string 

sprintf(array1, "Array Values are %d,%d,%d,%d", var1, var2, var3, var4); 
+0

好的建議先生,但我想我說的方式 – user1293997

+0

您正試圖寫入您的格式字符串,正如Alok已經指出的那樣,這是最簡單的方法,如果你想在一個變量中使用格式字符串,爲格式字符串定義一個單獨的變量 – nneonneo

+0

@ user1293997在這種情況下使用一個臨時數組。 – ouah