C++ 在调试模式下运行时缓冲区溢出

C++ 在调试模式下运行时缓冲区溢出,c++,visual-studio-2008,variadic-functions,widechar,printf,C++,Visual Studio 2008,Variadic Functions,Widechar,Printf,当在调试模式下运行我们的游戏时,我得到一个缓冲区溢出崩溃-调用堆栈是香蕉(看起来它卡在一个递归循环中),但是我跟踪到以下函数的崩溃: std::wstring formatWstring(const wchar_t *first, ...) { wchar_t str[4096]; va_list marker; va_start(marker, first); vswprintf_s(str, sizeof(str), first, marker); v

当在调试模式下运行我们的游戏时,我得到一个缓冲区溢出崩溃-调用堆栈是香蕉(看起来它卡在一个递归循环中),但是我跟踪到以下函数的崩溃:

std::wstring formatWstring(const wchar_t *first, ...)
{
    wchar_t str[4096];
    va_list marker;
    va_start(marker, first);
    vswprintf_s(str, sizeof(str), first, marker);
    va_end(marker);
    return str;
}
按以下方式调用:

std::wstring gmh = io::lexicon->getString("FE_gamemode_header");
std::wstring gms = io::lexicon->getString(formatString("FE_gamemode_%s", game->getCurrentMapGameMode().c_str()));
m_gameMode = formatWstring(L"%S: %S", gmh.c_str(), gms.c_str());

我似乎不知道是什么把事情搞砸了。。有什么线索吗?

试着把电话改成

vswprintf_s(str, sizeof(str)/sizeof(wchar_t), first, marker);

你的尺寸不对
wchar\u t
没有保证字符大小为1。

sizeof(str)
应该是
sizeof(str)/sizeof(wchar\t)
@LuchianGrigore这应该是答案。@AlexeyFrunze IDK,如果这是实际问题的话。操作:不要忽略阅读您正在使用的函数的描述。@LuchianGrigore它肯定会导致缓冲区溢出。