C传递给函数的变量参数

时间:2014-02-26 17:01:24

标签: c parameters

我有一个带有可变数量参数的模块:

int myprintf( const char *format, ...  ){

}

我想声明一个本地char数组,将“myprint”参数传递给sprintf(),以便sprintf()将参数转换为字符数组然后我可以对该字符数组执行某些操作。 通过这样做,我不必重新发明sprintf的内部。

理论上:

int myprintf( const char *format, ...  )

{
    char buf[ 512 ];

    sprintf( buf, format, ... );

  // now do something with buf

}

我确信va_start( a, b)va_arg( c, d )会与之有关;但是va_arg似乎需要解析原始参数列表。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

详细说明克里斯所说的话,如:

int vmyprintf(const char* format, va_list args)
{
        char buf[512];

        vsnprintf(buf, sizeof(buf), fmt, args);
        // now do something with buf 
}

int myprintf(const char *format, ...)
{
        va_list args;
        int ret;

        va_start(args, format);
        ret = vmyprintf(format, args);
        va_end(args);
        return ret;
}

答案 1 :(得分:1)

你可能正在寻找类似的东西:

void myprintf( const char *format, ...  )
{
    char buf[ 512 ];

    va_list vl;
    va_start (vl, format);
    vsnprintf(buf, 511, format, vl);
    va_end(vl);

    // now do something with buf
}

Some other information is available in my answer here

当然上面的答案会留下许多问题,例如我们将如何处理缓冲区溢出等问题。但这是另一个故事。