能不能实现,动态的指定函数的参数?解决方案

能不能实现,动态的指定函数的参数?

我的问题我自己觉得想起来挺简单的,但不知道C有没提供这样的机制可以实现.
描述如下:
如果要写一个函数:

void   FormatChars(char*   sResult,const   char*   sFormat,int[]   arrayDatas,int   nCount)

这个函数的功能是:调用sprintf(char*,const   char*,...)函数来格式化sResult.

例如,
FormatCahrs(sOut, "a=%d,b=%d ",array,2);
函数内部会调用:sprintf(sOut, "a=%s,b=%s ",array[0],array[1]);

FormatChars(sOut, "chinese:%d\n   english:%d\n   math:%d\n   grade:%d ",array,4);
函数内部会调用:sprintf(sOut, "chinese:%d\n   english:%d\n   math:%d\n   grade:%d ",array[0],array[1],array[2],array[3]);

就是说,sResult作为sprintf(char*,const   char*,...)的第一个参数,接受输入;sFormat作为第二个参数,即格式字符串;而arrayDatas和nCount确实后面的参数.由nCount来确定从arrarDatas数组里面取多少个数据.调用此函数之后sResult就变成新的一个字符串了.
请问大家能不能实现这样的功能啊?用va_list可不可以?请各位大合侠帮帮忙,感激不尽...


------解决方案--------------------
给你段代码,可以解决你的问题,虽然有点局限性。

#include <stdio.h>
#include <stdarg.h>
using namespace std;


void formatStr( char* str , const char *format , ... )
{
va_list pParameter ;
va_start( pParameter , format );

const char *temp = format ;
void *vTemp[10] ; //局限性在这儿,如果 不定参 个数超过了这个,那就出错了
int count = 0 ;

while( *format != '\0 ' )
{
if( *format == '% ' )
{
vTemp[count] = va_arg( pParameter , void* ) ;
++count ;
}
++format ;
}

sprintf( str , temp , vTemp[0] , vTemp[1] , vTemp[2] , vTemp[3] , vTemp[4] , vTemp[5] , vTemp[6] , vTemp[7] , vTemp[8] , vTemp[9]);
}
int main ()
{
char str[100] ;
formatStr( str , "楼主给了:%d%s " , 20 , "分 " );
printf( str );
//----------------------------
cin.get();
}
------解决方案--------------------
不知道这样符合LZ的要求不
/* nCount是sResult的最大长度, arrayDatas取得个数由sFormat定 */
intFormatChars(char* sResult,const char* sFormat,int[] arrayDatas,int nCount)
{
va_list arg_lsit = (va_list)arrayDatas;

return _vsnprintf( sResult, nCount, sFormat, arg_lsit );
}
------解决方案--------------------
楼主有想法啊哈,怎么能把sprintf()源码给弄来估计就解决了。