求教vsnprintf的使用问题

fhmdfsw 2012-04-20 11:40:33
void write(const char *pFmt, ... ) {
char pDest[4096] = {0};
va_list ap;
va_start(ap, pFmt);
vsnprintf(pDest, 4096, pFmt, ap);
va_end(ap);
cout << pDest << endl;
}

现在问题是:当pFmt格式为“%s, %ld, %s”时,第3个%s输入参数在输出时为(null),让我费解,这究竟是怎么回事?

求高手帮忙指点一二!
本人在线等待!
...全文
328 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fhmdfsw 2012-04-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
引用 5 楼 的回复:
引用 3 楼 的回复:
因为你传入的就是空指针。

看我的回复,第3个参数传入参数是有值的

LZ代码测试过了,没发现问题。
[/Quote]
多谢各位相助,问题已经解决了,问题原因在于,第2个%d参数传入的是自定义的int64即long long类型,
所以会出现第3个值为(null)的情况!
j8daxue 2012-04-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 3 楼 的回复:
因为你传入的就是空指针。

看我的回复,第3个参数传入参数是有值的
[/Quote]
LZ代码测试过了,没发现问题。
yyz537 2012-04-20
  • 打赏
  • 举报
回复
vsnprintf 改为 vsnprintf_s
fhmdfsw 2012-04-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
因为你传入的就是空指针。
[/Quote]
看我的回复,第3个参数传入参数是有值的
fhmdfsw 2012-04-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
把你调用那里的代码贴一下,多半是参数不符导致的
[/Quote]
函数时这样的:
void write(const char *szFmt, ... )
{
char szLogData[4096] = {0};
va_list ap;
va_start(ap, szFmt);
vsnprintf(szLogData, 4096, szFmt, ap);
va_end(ap);

cout << szLogData << std::endl;
}
}
调用时这样的:
string str = "aaa";
string s = "123";
int i = 231;
write("%s, i [%d], s [%s]", str.c_str(), i, s.c_str());
结果显示:
aaa, i [231], s [(null)]
qq120848369 2012-04-20
  • 打赏
  • 举报
回复
因为你传入的就是空指针。
nice_cxf 2012-04-20
  • 打赏
  • 举报
回复
把你调用那里的代码贴一下,多半是参数不符导致的
j8daxue 2012-04-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
void write(const char *pFmt, ... ) {
char pDest[4096] = {0};
va_list ap;
va_start(ap, pFmt);
vsnprintf(pDest, 4096, pFmt, ap);
va_end(ap);
cout << pDest << endl;
}

现在问题是:当pFmt格式为“%s, %ld, %s……
[/Quote]
没发现问题。只不过最好写成sizeof(p) / sizeof(p[0]) - 1或4095而不是4096

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧