C++ va_args在XCode中中断宽字符串函数(swprintf)
仅在Xcode中(VisualStudio很好),如果您尝试使用va_args将swprintf放入包装器函数中,我会看到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
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解决了这个问题,谢谢。