va_args 在 XCode 中破坏了宽字符串函数 (swprintf)
va_args breaks wide string functions (swprintf) in XCode
仅在 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 但它没有产生任何变化,它看起来像是一个单独的问题。
谢谢。
如果你想传递一个va_list对象,那么使用
int vswprintf(
const wchar_t* buffer,
size_t bufsz,
const wchar_t* format,
va_list vlist );
结尾的 ... 只是表示其参数的长度可能不同,但这并不意味着您可以直接传递 va_list 对象。
仅在 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 但它没有产生任何变化,它看起来像是一个单独的问题。
谢谢。
如果你想传递一个va_list对象,那么使用
int vswprintf(
const wchar_t* buffer,
size_t bufsz,
const wchar_t* format,
va_list vlist );
结尾的 ... 只是表示其参数的长度可能不同,但这并不意味着您可以直接传递 va_list 对象。