作者MaxHaru (懂得放手..才是王道)
看板C_and_CPP
标题[讨论] 如何用function来包像printf这种function
时间Sun Feb 28 16:22:31 2016
各位好,
像printf这类参数不定的function,
要如何用另一个参数不定的function来包呢?
Ex: printf(const unsigned char *fmtstr, ...)
如果我要用类列下列的参数不定function来包printf()要如何完成呢?
Ex: Func(const unsigned char *str, ???)
{
unsigned char buf[80];
sprintf(buf, str, ???);
printf("%s Test\n", buf);
}
需要有什麽特殊的方法吗?
请各位多多赐教..
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.171.215.105
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1456647753.A.D21.html
1F:推 LPH66: #include <stdarg> /* C header, C++ 用 <cstdarg> */ 02/28 16:24
2F:→ LPH66: 然後用吃 va_list 参数的里层函数接外层的不定参数 02/28 16:25
3F:推 a1b2c3d4e5x: 搜寻可变参数或 va_list 之类的 02/28 16:26
4F:→ LPH66: printf/scanf 系函式都有对应的 v 版, 函式前面加个 v 即是 02/28 16:26
5F:→ LPH66: 例如 vsprintf, vscanf 等等 02/28 16:26
6F:→ Caesar08: 如果是C++,可以参考Parameter pack或variadic template 02/28 16:28
谢谢楼上几位的建议, 已解决..
做法如下,
#include <stdarg.h>
Func(const unsigned char *str, ...)
{
unsigned char buf[80];
va_list arg;
va_start(arg, str);
vsprintf(buf, str, arg);
va_end(arg);
printf("%s Test\n", buf);
}
※ 编辑: MaxHaru (118.171.215.105), 02/28/2016 16:54:23