gpt4 book ai didi

c++ - vsnprintf 和 gcc

转载 作者:太空宇宙 更新时间:2023-11-04 05:06:16 26 4
gpt4 key购买 nike

我有以下声明:

vsnprintf(target, size - 1, "%ls_%ls", str16_1, str16_2);

为什么这在 gcc 上失败了?

我在 Windows 上是这样使用的:

vsnprintf(target, size - 1, "%S_%S", str16_1, str16_2);

它按预期工作。在 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);
}

我检查过,new_format 是正确的。

谢谢!

最佳答案

尝试使用snprintf,原因是vsnprintfvsnprintf 采用 va_list 类型的参数,而不是文字可变参数列表。例如:

va_list ap;
va_start (ap, first_arg_in_this_function);
vsnprintf (buf, size, format_str, ap);
va_end (ap);

而对于 sprintf:

snprintf (buf, size, format_str, x, y);

在...时使用v*printf

  1. 围绕 printf 样式函数制作包装器
  2. 可变参数宏不是一个选项

否则只需使用*printf

关于c++ - vsnprintf 和 gcc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3362994/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com