直接用sprintf 不行吗?

liulin2025 2013-01-06 02:44:34


char buffer[80];

int vspf(char *fmt, ...)
{
va_list argptr;
int cnt;

va_start(argptr, fmt);
cnt = vsprintf(buffer, fmt, argptr);
va_end(argptr);

return(cnt);
}

int main(void)
{
int inumber = 30;
float fnumber = 90.0;
charstring[4] = "abc";

vspf("%d %f %s", inumber, fnumber, string);
printf("%s\n", buffer);
return 0;
}


直接用sprintf 不行吗?
难道自己包装一个 vspf就高明?
...全文
575 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
JackyRao 2013-01-09
  • 打赏
  • 举报
回复
你的问题是????
bravery36 2013-01-08
  • 打赏
  • 举报
回复
我觉得这个纯粹是练习使用变参吧,我自己在用一些不太熟的api时也喜欢做一些简单的例程来测试下使用方法。
「已注销」 2013-01-08
  • 打赏
  • 举报
回复
主贴的构思太高明啦!
liulin2016 2013-01-07
  • 打赏
  • 举报
回复
引用 17 楼 zhao4zhong1 的回复:
引用 15 楼 liulin2016 的回复:引用 4 楼 zhao4zhong1 的回复:楼主试试将下例中的_vsnprintf改为sprintf? C/C++ code?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354……
LogV(pszFmt,argp); 内部有一句: if (-1==_vsnprintf(logstr,ARRSIZE(logstr),pszFmt,argp)) logstr[ARRSIZE(logstr)-1]=0; 我直接改成: sprintf(logstr,pszFmt) 就行了,当然这是有缺陷的,比如缓冲区太小。 但是我觉得缓冲区大小 不应该与 _vsnprintf的第4个参数 argp有关系, 这个是一个宏。 我觉得 _vsnprintf的设计只需啊要3个参数足以 水平差, 只是表达心中的困惑
赵4老师 2013-01-07
  • 打赏
  • 举报
回复
引用 15 楼 liulin2016 的回复:
引用 4 楼 zhao4zhong1 的回复:楼主试试将下例中的_vsnprintf改为sprintf? C/C++ code?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656……
等待你来个sprintf版本中……
mymtom 2013-01-07
  • 打赏
  • 举报
回复
就是sprintf的功能啊。 看起来就是个练习嘛。
liulin2016 2013-01-07
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
楼主试试将下例中的_vsnprintf改为sprintf? C/C++ code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677……
你的有多高明? 实话,我觉得 这个函数就是一个装13的。 当然也你喜欢用罢了。 sprintf完全可以搞定
wjb955201 2013-01-07
  • 打赏
  • 举报
回复
sprintf只是一个库函数~
赵4老师 2013-01-07
  • 打赏
  • 举报
回复
引用 18 楼 liulin2016 的回复:
引用 17 楼 zhao4zhong1 的回复:引用 15 楼 liulin2016 的回复:引用 4 楼 zhao4zhong1 的回复:楼主试试将下例中的_vsnprintf改为sprintf? C/C++ code?123456789101112131415161718192021222324252627282930313233343536373839404142……
你不妨按你说的改完编译链接运行一下看看输出结果是啥。
季昂 2013-01-07
  • 打赏
  • 举报
回复
我觉得有几个方面 1,sprintf不安全,建议用snprintf 2,方便管理char buffer[80];如加一个vsclear函数来清空buffer 3,配合着va_start(argptr, fmt);va_end(argptr); 认为vsnprintf在参数异常的时候,要更加安全一些。
Primitive_forest 2013-01-07
  • 打赏
  • 举报
回复
路过,高手不少
ForestDB 2013-01-06
  • 打赏
  • 举报
回复
谁包装的去问谁。
AnYidan 2013-01-06
  • 打赏
  • 举报
回复
独孤求败二世
liulin2025 2013-01-06
  • 打赏
  • 举报
回复
liulin2025 2013-01-06
  • 打赏
  • 举报
回复
还有高手愿意回答吗, 多谢楼上, 期待更加精确的答案
ForestDB 2013-01-06
  • 打赏
  • 举报
回复
都是标准的库函数呢。
lin5161678 2013-01-06
  • 打赏
  • 举报
回复
引用 7 楼 shandongmn 的回复:
引用 6 楼 ForestDB 的回复:也许是他不知道有sprintf,也许他是在练习可变参数相关的api。 引用 5 楼 lin5161678 的回复:单纯在这么 明显直接用sprintf就可以了 嗯 也许写代码的人不知道有这个sprintf函数?? 看来微软是吃饱了没事干? 闲着没事,多开发一个函数给码农用了
我比较好奇哪一个函数是微软开发? 另外就是 函数 开发?? 我凌乱了
shandongmn 2013-01-06
  • 打赏
  • 举报
回复
引用 6 楼 ForestDB 的回复:
也许是他不知道有sprintf,也许他是在练习可变参数相关的api。
引用 5 楼 lin5161678 的回复:
单纯在这么 明显直接用sprintf就可以了 嗯 也许写代码的人不知道有这个sprintf函数??
看来微软是吃饱了没事干? 闲着没事,多开发一个函数给码农用了
ForestDB 2013-01-06
  • 打赏
  • 举报
回复
也许是他不知道有sprintf,也许他是在练习可变参数相关的api。
lin5161678 2013-01-06
  • 打赏
  • 举报
回复
单纯在这么 明显直接用sprintf就可以了 嗯 也许写代码的人不知道有这个sprintf函数??
加载更多回复(4)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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