如何使用变量参数列表,va_list,va_start,va_end将百分比字符写入文件

cbr*_*cbr 0 c c++ printf variadic-functions

我需要%%在格式字符串中使用才能写出这样的%字符:

printf("%%");
Run Code Online (Sandbox Code Playgroud)

我试图在我的变量参数列表函数中执行此操作.格式符做工精细,例如%d,%s等等.但是,当我尝试写%使用字符%%,这是行不通的.为什么有解决方案?

void foo(LPCSTR sFrmtStr, ...)   
{   
    char buffer[4096] = { 0 };

    va_list argList;
    va_start(argList, sFrmtStr);
    vsprintf(buffer, sFrmtStr, argList);
    va_end(argList);

    printf(buffer);
}
Run Code Online (Sandbox Code Playgroud)

And*_*nle 7

当然 "这是行不通的." 你打电话printf与具有单一字符串%在它调用后vsprintf():

void foo(LPCSTR sFrmtStr, ...)   
{   
    char buffer[4096] = { 0 };

    va_list argList;
    va_start(argList, sFrmtStr);
    vsprintf(buffer, sFrmtStr, argList);
    va_end(argList);

    /* Now buffer holds a string with a single '%' in it */
    printf(buffer);
}
Run Code Online (Sandbox Code Playgroud)

修复:

void foo(LPCSTR sFrmtStr, ...)   
{   
    /* doesn't need to be initialized */
    char buffer[4096];

    va_list argList;
    va_start(argList, sFrmtStr);
    /* assume vsnprintf is available */
    vsnprintf(buffer, sizeof( buffer ), sFrmtStr, argList);
    va_end(argList);

    /* puts() is probably better... */
    /* and fputs( buffer, stdout ) is even better... */
    fputs( buffer, stdout );
    /* printf("%s", buffer); */
}
Run Code Online (Sandbox Code Playgroud)