[討論] 如何用function來包像printf這種function

看板C_and_CPP作者 (懂得放手..才是王道)時間9年前 (2016/02/28 16:22), 9年前編輯推噓2(204)
留言6則, 3人參與, 最新討論串1/1
各位好, 像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://www.ptt.cc/bbs/C_and_CPP/M.1456647753.A.D21.html

02/28 16:24, , 1F
#include <stdarg> /* C header, C++ 用 <cstdarg> */
02/28 16:24, 1F

02/28 16:25, , 2F
然後用吃 va_list 參數的裡層函數接外層的不定參數
02/28 16:25, 2F

02/28 16:26, , 3F
搜尋可變參數或 va_list 之類的
02/28 16:26, 3F

02/28 16:26, , 4F
printf/scanf 系函式都有對應的 v 版, 函式前面加個 v 即是
02/28 16:26, 4F

02/28 16:26, , 5F
例如 vsprintf, vscanf 等等
02/28 16:26, 5F

02/28 16:28, , 6F
如果是C++,可以參考Parameter pack或variadic template
02/28 16:28, 6F
謝謝樓上幾位的建議, 已解決.. 做法如下, #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
文章代碼(AID): #1Mqgv9qX (C_and_CPP)