Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
void myPrintf(const char* format, ...) { // some code va_list vl; printf(format, vl); } int main() { myPrintf("%d\n", 78); }
在这段代码中,我尝试将参数从省略号传递到printf. 它编译但打印垃圾而不是78。正确的做法是什么?
printf
您需要执行以下操作:
void myPrintf(const char *format, ...) { va_list vl; va_start(vl, format); vprintf(format, vl); va_end(vl); }
请注意使用vprintf代替printf。
vprintf
两个问题:
第一个是你不初始化vl,使用va_start它。之后别忘了使用va_end。
vl
va_start
va_end
另一个问题是printf不需要va_list争论。为此使用vprintf。
va_list
首先初始化vl
va_start(vl,1); //No. of arguments =1
然后从中int取出
int
printf(format, va_arg(vl,int));