带有变量参数的 vsnprintf 问题
vsnprintf problems with variable arguments
以下代码将在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);
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 带有变量参数的 vsnprintf 问题