C言語関係掲示板

過去ログ

No.1320 可変個引数を呼び出した関数に渡す

[戻る] [ホームページ]
No.17768

動的変数について教えてください
投稿者---初心者(2004/11/04 11:54:18)


はじめまして。
ただいま、困っております。

動的変数を持つ関数内から、その引数をそのまま、他の動的変数を持つ
関数を呼ぶ!ということが可能なのでしょうか?

関数1を呼び出したら、その引数を関数1の中で関数2に渡したいのです。
関数1( const char* aString, ... );
関数2( int aSize, const char* aString aString, ... );

ご存知の方がおられましたら御教授ください。



No.17769

Re:動的変数について教えてください
投稿者---nop(2004/11/04 12:24:42)


>動的変数を持つ関数内から、その引数をそのまま、他の動的変数を持つ
>関数を呼ぶ!ということが可能なのでしょうか?
>関数1を呼び出したら、その引数を関数1の中で関数2に渡したいのです。
>関数1( const char* aString, ... );
>関数2( int aSize, const char* aString aString, ... );

可変個引数の間違いでしょうか?
結論としては不可能です。

vprintf()系の様に、va_listの形式であれば可能ですが…。


No.17770

Re:動的変数について教えてください
投稿者---初心者(2004/11/04 13:12:02)


>>動的変数を持つ関数内から、その引数をそのまま、他の動的変数を持つ
>>関数を呼ぶ!ということが可能なのでしょうか?
>>関数1を呼び出したら、その引数を関数1の中で関数2に渡したいのです。
>>関数1( const char* aString, ... );
>>関数2( int aSize, const char* aString aString, ... );
>
>可変個引数の間違いでしょうか?
>結論としては不可能です。
>
>vprintf()系の様に、va_listの形式であれば可能ですが…。

可変引数の間違いです。
すみません。
それぞれの関数インターフェイスは変更不可なた、
関数1内で、wvsprintfを用いて文字列化し、関数2へ
"%s"をconst char*に指定するという方法しかない・・・
という結論に達しました。

お付き合いくださりありがとうございました(*^。^*)




No.17771

Re:動的変数について教えてください
投稿者---tetrapod(2004/11/04 13:27:49)


まあ確かに「そのままでは不可能」なのですが、こーいう場合は
func1(const char *fix_arg, ...) {
  va_list v; va_start(v, fix_arg);
  func3(n, fix_arg, v); // この n はテキトーだけど
  va_end(v);
}

func2(int n, const char* fix_arg, ...) {
  va_list v; va_start(v, fix_arg);
  func3(n, fix_arg, v);
  va_end(v);
}

func3(int n, const char* fix_arg, va_list v) { ... }

のようにして func2 の本体を func3 に移せばいい。
そーすれば見た目のインターフェイスは変わらない。