- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有以下声明:
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
,原因是vsnprintf
。 vsnprintf
采用 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
否则只需使用*printf
关于c++ - vsnprintf 和 gcc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3362994/
我有以下代码,并试图理解为什么 vsnprintf 会导致格式字符串漏洞。 如果我执行如下程序“./test %llx”,这个漏洞是否是因为“%llx”被传入va_list,然后被vsprintf解释
我正在尝试使用 TI C2000 微 Controller 在 TFT 显示器上显示格式化字符串。为了实现这一点,我使用了以下函数。 void text_writeFormatAtPoint(font
是否可以使用 vsnprintf 从数组中的确切值开始打印?例如,我想使用 vsnprintf 从数组中的第 25 个字符开始打印。我可以只输入这段代码吗? va_list args; #define
我有以下功能: void printerror(char *fmt, ...) { char string[256]; va_list str; va_start(str, f
带有 myPrint() 函数的超长字符串将会崩溃。 我认为 vsnprintf() 无法从 linux 手册页返回超过缓冲区长度的写入大小。 我预期的字符串是缓冲区大小的截断字符串,但这在下面的测试
我正在将一些非常古老(> 10y)的 C 代码移植到现代 Linux。我在自定义编写的 vsnprintf() 包装器中遇到了段错误(显然它的任务是检测重复的输出字符串并保留它们): char* st
我正在编写需要格式化字符串的代码,我想避免缓冲区溢出。 我知道如果 vsnprintf 可用(从 C99 开始)我们可以: char* formatString(const char *format,
我正在尝试编写一个宏来简化 LOG4CPLUS 的使用。但是我在写宏的时候遇到了一些麻烦。 这是我的 cpp 文件中的内容: Logger logger = Logger::getInstance("
我在 ubuntu 12.04 上,使用 uname -a:Linux lu057801 3.2.0-31-generic#50-Ubuntu SMP Fri Sep 7 16:16:45 UTC 2
在实现一个简单的 printf 样式记录器时,我遇到了 vsnprintf 崩溃。这就是我调用记录器实用程序的方式: LoggerUtil->LogInfo("Whatever info here %
以下代码将在 Visual Studio 2012 上给出预期结果,但在 XCode 5.0 上不会。我想念什么? static std::string format(const std::strin
我正在重写一些代码以与 32 位和 64 位架构兼容,但我在调用 vsnprintf 时遇到了问题。 vsnprintf 似乎没有在任一架构上正确处理来自 inttypes.h 的固定大小整数类型。
我有以下声明: vsnprintf(target, size - 1, "%ls_%ls", str16_1, str16_2); 为什么这在 gcc 上失败了? 我在 Windows 上是这样使用的
我目前正在将 C 头文件翻译成 delphi。 delphi中有没有函数可以代替C语言的vsnprintf?或者它是否存在于任何常见的 DLL 中? int vsnprintf(char *str,
vsnprintf() 能否返回一个大于 1 的负值?如果是,它是在什么情况下这样做的? 我尝试使用 %ls 作为 char 数组的格式说明符,还尝试复制大于分配的数组。在这两种情况下,我都得到 -1
我有一个大小为 N 的 char 数组,我需要在不同部分获取 vsnprintf 输出,以防其长度超过 char 数组大小减去 1(N-1 字节)。 我想实现类似 printf 的东西,但通过 UAR
我看过这个question以及这些 PDF 的 1和 2 , 这个page并且非常了解如果我这样做会发生什么 printf(SOME_TEST_STRING)。但我不明白的是,与 vsprintf 相
我有以下功能: void raiseError(const char *msg, ...) { va_list ap; va_start(ap, msg); // use variab
vsnprintf 的预期行为是什么?当它有一个输入 NULL 字符串和/或 size=0 时,例如 vsnprintf(NULL, 0, "%d", p); 或者 vsnprintf(NULL, 1
我的代码如下: #include #include #include int test(const char *fmt, ...); int main(void) { int i
我是一名优秀的程序员,十分优秀!