gpt4 book ai didi

c++ - 可变参数的 vsnprintf 问题

转载 作者:太空宇宙 更新时间:2023-11-04 15:43:48 29 4
gpt4 key购买 nike

以下代码将在 Visual Studio 2012 上给出预期结果,但在 XCode 5.0 上不会。我想念什么?

static std::string format(const std::string fmt, ...)
{
va_list vl;
va_start(vl, fmt);
int size=vsnprintf(0, 0, fmt.c_str(), vl);

if(size<1)
return std::string();


char szBuf[256];

vsnprintf(szBuf, 256, fmt.c_str(), vl);

return szBuf;
}

电话:

for(int no=1;no<10;no++)
{
std::string strPath=format("entry%02d.txt",no);
}

将在 Windows 上生成正确的“entry01.txt”,但在使用 XCode 的 OSX 上为“entry1852125044.txt”。

上面的代码被缩短以关注问题。这就是看起来很奇怪的原因(询问尺寸而不使用它)。我还需要处理格式字符串。

最佳答案

您正在尝试遍历 va_list 两次,每次调用 vsnprintf 一次。您需要将每个迭代括在 va_start/va_end 对中:

//...
va_start(vl, fmt);
int size=vsnprintf(0, 0, fmt.c_str(), vl);
va_end(v1);

//...

va_start(vl, fmt);
vsnprintf(szBuf, 256, fmt.c_str(), vl);
va_end(vl);

关于c++ - 可变参数的 vsnprintf 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19955270/

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