2017-01-02 14 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(出力ストリームがstdoutされた状態でprintfの一般的なバージョンである)fprintfと同様であるので、すべての制御フォーマットが適用 - 詳細は、標準的に見出すことができる:

7.21。 6.5

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

それはそのように見えるsnprintfの機能は、私が探していたまさにです!配列のサイズとして '100'を使用する代わりに、正確なサイズを使用する方法はありませんか?ありがとう! – Robb1

+2

とにかく(静的にも動的にでも)バッファサイズを割り当てる必要があります。そのような単純な場合、静的バッファは – artm

+2

で十分です。動的またはVLA割り当てを使用する場合は、 'snprintf'は書き込まれた文字数を返します。文字列が切り捨てられた場合、バッファーが十分に大きい場合に書き込まれた文字数が返されます。サイズが0のときにバッファとして 'NULL'を渡すことは正当です。' n = snprintf(NULL、0、...) 'を最初に呼び出し、' n + 1'バイトを割り当ててから再び 'snprintf'を呼び出してくださいバッファとその正しいサイズで –

関連する問題