gpt4 book ai didi

c++ - 从单独的库调用 swprint 失败

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:01:33 25 4
gpt4 key购买 nike

我遇到了一个奇怪的问题。我根据带有或不带有 unicode 的构建定义使用 sprintf 或 swprintf。我将这些函数包装在我自己的函数中,如下所示:

int mysprintf( MCHAR* str,size_t size, const MCHAR* format, ... )
{
#ifdef MYUNICODE
return swprintf( str, size, format);
#else
return snprintf( str, format);
#endif
}

这些函数位于一个 String 类中,该类是一个单独的项目并被编译为一个库。我在另一个程序中使用它。现在,如果我使用 mysprintf()

msprintf(str,10, _M("%d,%d"),height,width);

我在字符串缓冲区中得到了一些垃圾值。但是,如果我直接从程序中调用 swprintf 函数,它就可以正常工作。我在构建中定义了 UNICODE 并且函数 swprintf 确实被调用,但它填充了一些垃圾值。我不明白出了什么问题。

谢谢阿米特

最佳答案

问题确实在于你有自己的参数数量可变的函数。您需要获取指向参数列表的指针并将其传递给被调用者。 va_start 使您能够做到这一点,它需要参数列表中的最后一个指针指向您的函数。

   int mysprintf( MCHAR* str, size_t size, const MCHAR* format, ... )
{
va_list args;
va_start(args, format);

int result;

#ifdef MYUNICODE
result = vswprintf( str, size, format, args);
#else
result = ..
#endif

va_end(args);

return result;
}

干杯!

关于c++ - 从单独的库调用 swprint 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/891637/

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