0

関数を、印刷するメッセージの前に。を付けるだけprintfの新しい関数に変更したいと思います。printf2Hello

私はそれをできた

void printf2(char message[]) {
    printf("Hello ");
    printf(message);
}

message問題は%d、、、%cなどの場合に追加の引数を渡すことができないことです。

printf2できる限り多くのパラメーターを受け入れてprintf、それらを渡すにはどうすればよいprintfですか?

4

3 に答える 3

2

上記のコメントは正しい方向を示していますが、タグ (Hello) を先頭に追加する方法の例を次に示します。

注: 私はprintfの sおよびnバージョンを使用して、一時バッファーをオーバーフローしない新しい文字列をフォーマットしました。*MAX_MSG_SIZE* は他の場所で適切に定義されていると想定されています。

void printf2(const char *format, ...)
{

    char buffer[MAX_MSG_SIZE] = "";  


    va_list args;


    va_start(args,format);
    vsnprintf(buffer, MAX_MSG_SIZE, format, args);
    va_end(args);   

    printf("Hello: %s\n", buffer);
}
于 2012-07-19T15:52:11.553 に答える
0
  1. 変数パラメータを制御するには、以下の関数を使用する必要があります。

    void va_start( va_list arg_ptr, prev_param );   
    type va_arg( va_list arg_ptr, type );   
    void va_end( va_list arg_ptr );  
    
  2. フォーマット文字列を判断します。switch()ステートメントjudge %d%cなど%sを使用する

于 2012-07-19T15:50:58.697 に答える
0
void print_message(char *format, ...)
{
    printf("%s", "Hello: ")
    va_list ptr;
    va_start(ptr, format);
    vprintf(format, ptr);
    va_end(ptr);
}

ノート:

  1. printf("%s", "Hello: ") は、printf("Hello: ") よりも少し高速です (フォーマット文字列フェーズのスキャンをスキップするため)
  2. printf(メッセージ); 本当に悪い考えです。メッセージに「%s」のようなものが含まれているとクラッシュします。
于 2012-07-19T19:51:31.453 に答える