作者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/m.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