|
查看: 1119|回复: 3
|
关于vararg 问题:
[复制链接]
|
|
|
发表于 15-12-2008 09:09 AM
|
显示全部楼层
|
哎呀,沒注意到b不可以改這點,那就是說只有sprintf提供呼叫而沒有vsprintf可以直接呼叫的情況了 |
|
|
|
|
|
|
|
|
|
|
怎么把一个函数的 var args ,呼唤 另一个函数 which also 接受 var args
因为 "..." 是 多个东西,不是 一个东西
例如:
void b( char *arg1, ...);
void a( char *arg1, ... ) {
va_list ap;
va_start(ap, arg1);
..
b( arg1, ...) (<--- 这里怎么把 a 的 "..." call b 时整个丢进去 ?)
..
va_end(ap);
}
假设b 不可以改。
该不会要我一个一个 自己塞进stack 吧。。。
[ 本帖最后由 tensaix2j 于 12-12-2008 05:04 PM 编辑 ] |
|
|
|
|
|
|
|
|
|
|
发表于 15-12-2008 09:06 AM
|
显示全部楼层
int sprintf (char * szBuffer, const char * szFormat, ...)
{
int iReturn ;
va_list pArgs ;
va_start (pArgs, szFormat) ;
iReturn = vsprintf (szBuffer, szFormat, pArgs) ;
va_end (pArgs) ;
return iReturn ;
}
你可以提供两个版本的函数,一个接受...,一个接受va_list
然后...版本是呼叫va_list版本,就像sprintf跟vsprintf一样
也就是把处理的部分弄成另外一个函數是接受va_list的
比如說寫一個MessageBoxf的函數,不是呼叫sprintf而是直接呼叫vsprintf處理傳進去的va_list |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 30-12-2008 09:47 AM
|
显示全部楼层
那没办法咯,只好改b
谢了, christiano |
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|