我有以下声明:
vsnprintf(target, size - 1, "%ls_%ls", str16_1, str16_2);
Run Code Online (Sandbox Code Playgroud)
为什么这会在gcc上失败?
我在Windows上使用过这样的:
vsnprintf(target, size - 1, "%S_%S", str16_1, str16_2);
Run Code Online (Sandbox Code Playgroud)
它按预期工作.在gcc文档中我发现%S是%ls的同义词,但我不能使用它.我也试过%S,但是没有用.我在具有可变参数列表的函数中使用它.是否可能无法工作,因为我更改了传递给va_start的格式变量?我必须搜索%S并将其替换为格式变量中的%ls.
功能如下:
void f(const char* format, ...){
char* new_format = format with %S replaced with %ls;
va_list argptr;
va_start(args, format);
vsnprintf(str, size-1, new_format, argptr);
}
Run Code Online (Sandbox Code Playgroud)
我查了一下,new_format是正确的.
谢谢!
尝试使用snprintf,原因是vsnprintf.vsnprintf采用类型的参数va_list,而不是文字的可变参数列表.例如:
va_list ap;
va_start (ap, first_arg_in_this_function);
vsnprintf (buf, size, format_str, ap);
va_end (ap);
Run Code Online (Sandbox Code Playgroud)
而sprintf:
snprintf (buf, size, format_str, x, y);
Run Code Online (Sandbox Code Playgroud)
使用v*printf时......
否则只需使用 *printf