va_args在XCode中打破了宽字符串函数(swprintf)

时间:2016-05-09 00:20:55

标签: c++ printf variadic-functions widestring

仅在Xcode中(visual studio很好),如果您尝试使用va_args将其放入包装函数中,我会看到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的一些怪癖。

我已按照此问题中的建议弄乱了区域设置和文件属性:swprintf fails with unicode characters in xcode, but works in visual studio但它没有产生任何更改,它看起来像是一个单独的问题。

感谢。

1 个答案:

答案 0 :(得分:1)

如果要传递va_list对象,请使用

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

尾随...只是意味着它的参数长度可能不同,但这并不意味着你可以直接传递一个va_list对象。