2011-01-10 1 views
6

何らかの理由で、私はこの作業を取得カント:va_startでstringを使用する方法は?

void examplefunctionname(string str, ...){ 
... 
    va_start(ap, str.c_str()); 

も私はこの仕事を得るか:

void examplefunctionname(string str, ...){ 
... 
    int len = str.length(); 
    char *strlol = new char[len+1]; 
    for(int i = 0; i < len; i++){ 
     strlol[i] = str[i]; 
    } 
    strlol[len] = 0; 
    va_start(ap, strlol); 

が、これが行われます。

void examplefunctionname(const char *str, ...){ 
... 
    va_start(ap, str); 

誰かがどのように私は私を示すことができたがそこにconst char *の代わりに文字列を使用できますか?

私はexamplefunctionname("%d %d %d", 1337, 1337, 1337)

+1

関数が 'string'をとる例ではなぜ' va_start(ap、str) 'を使用していませんか?あなたは、 'va_start'マクロのパラメータの名前を、任意の式ではなく使用することになっています。 –

+0

ああ、私はそれが文字列を読み込むと思ったので、変数にアドレスをとって...最後の変数を知って、次にそれをループするのに使うのですか?ああ..私は今それを見る – Newbie

答えて

5

ドキュメントから:

va_start(va_list ap, last) ...パラメータlastは、可変引数リスト、呼び出し関数が型を知っているのすなわち、最後のパラメータ前の最後のパラメータの名前です。

実際の例で正しく実行しました。va_start(ap, str)strが最後の既知の引数です。しかし、他の2つの例では、奇妙なことをva_startに渡しています。

0

va_startが場所として第二引数を使用するマクロで呼び出すときには、乱数を出力し、あなたはそれゆえ、あなたが与える最後の例を使用する必要があります。

1

va_startには、前のパラメータが必要です。つまり、型にかかわらず、strを直接渡す必要があります。それはconst char *を取らず、あなたのために文字列を解析しません。

0
void examplefunctionname(string str, ...){ 
... 
va_start(ap, str); 
関連する問題