2016-05-09 11 views
-1

Xcodeのみ(Visual Studioは問題ありません)、va_argsを使ってラッパー関数に入れようとするとswprintf breakが表示されています。va_argsはXcodeのワイド文字列関数(swprintf)を破ります

簡単な例:

void test(wchar_t *a_buffer, int a_buffer_size, const wchar_t* a_format, ...) 
{ 
    va_list args; 
    va_start(args, a_format); 
    ::swprintf(a_buffer, a_buffer_size, a_format, args); 
    va_end(args); 
} 

double value = 1.0; 
wchar_t text[32]; 
::swprintf(text, 32, L"%f", value); // this works (text=L"1.0000") 

test(text, 32, L"%f", 30.0); // this does not work (text=L"0.0000") 

すべてのヘルプ感謝、それはかなりスタンパです。私は問題がXcodeのいくつかの奇妙なものであると仮定しています。

私はすでに、この質問に示唆されているように、ロケール設定とファイルプロパティを混乱させていますが、変更はありません。別の問題のようです。

ありがとうございました。

+6

'swprintf()'はvarargs引数をとっていません。あなたは 'vswprintf()'を使っていることを意味します。 – mah

+0

vswprintf()は本当に必要なものです、ありがとうございます。 –

答えて

1

あなたはva_listのオブジェクトを渡したい場合は、

int vswprintf(
    const wchar_t* buffer, 
    size_t bufsz, 
    const wchar_t* format, 
    va_list vlist); 

末尾を使用して...ちょうどその引数の長さが変わる可能性を意味し、それはあなたが直接va_listのオブジェクトを渡すことができることを意味するものではありません。

+0

これは本当に私の問題でした。私はva_listを関数に渡すことができたと考えました。 test()関数内でvswprintfを使用して解決しました。ありがとうございます。 –

関連する問題