2017-01-02 27 views
2

如何在C中建立一個字符串,其中包含參數?有沒有類似fprintf的語法來做到這一點?比如這裏有一個小testProg.c在fprintf語法中定義字符串

int main(int argc, char *argv[]) { 
    printf("You are running %s program.\n", argv[0]); 
    // It will print: "You are running testProg.c program.\n" 
    char myString[]; 
    // I want the string printed by printf to be saved inside myString[] 
    // ... 
} 

回答

7

您可以使用snprintf。首先確定適合內容的myString的緩衝區大小。然後使用snprintf填寫內容。

char myString[100] = ""; 
snprintf(myString, sizeof(myString), "You are running %s program.", argv[0]); 

snprintf類似於fprintf(這是printf與輸出流是stdout普通版),所以應用了所有控制格式 - 的細節可以在標準中找到:

7.21。 6.5 snprintf功能

 #include <stdio.h> 
    int snprintf(char * restrict s, size_t n, 
      const char * restrict format, ...); 
+0

看起來這正是我一直在尋找的!沒有辦法使用所需的確切大小,而不是使用'100'作爲數組大小?謝謝! – Robb1

+2

無論如何您需要分配緩衝區大小(靜態或動態) - 對於這種簡單情況,靜態緩衝區就足夠了 – artm

+2

如果您想使用動態或VLA分配:'snprintf'返回寫入的字符數。如果字符串被截斷,它將返回緩衝區足夠大的情況下寫入的字符數。當size爲0時,將'NULL'作爲緩衝區是合法的,所以你可以先調用'n = snprintf(NULL,0,...)',分配'n + 1'個字節,然後再次調用'snprintf'與緩衝區和正確的大小。 –