C++ va_args在XCode中中断宽字符串函数(swprintf)

C++ va_args在XCode中中断宽字符串函数(swprintf),c++,printf,variadic-functions,widestring,C++,Printf,Variadic Functions,Widestring,仅在Xcode中(VisualStudio很好),如果您尝试使用va_args将swprintf放入包装器函数中,我会看到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_f

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

我已经弄乱了本问题中建议的区域设置和文件属性:但它没有产生任何更改,看起来是一个单独的问题


谢谢。

如果要传递va_列表对象,请使用

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

尾随。。。只是意味着它的参数长度可以不同,但并不意味着可以直接传递va_列表对象。

swprintf()
不接受varargs参数。您的意思是要使用
vswprintf()
。vswprintf()确实是我需要的,谢谢。这确实是我的问题,我想可以将va_列表传递给。。。功能。在test()函数中使用vswprintf解决了这个问题,谢谢。