相关疑难解决方法(0)

使用va_list调用printf

void TestPrint(char* format, ...)
{
    va_list argList;

    va_start(argList, format);
    printf(format, argList);
    va_end(argList);
}


int main()
{
    TestPrint("Test print %s %d\n", "string", 55);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我需要得到:

Test print string 55
Run Code Online (Sandbox Code Playgroud)

实际上,我得到了垃圾输出.这段代码有什么问题?

c printf variadic-functions

49
推荐指数
4
解决办法
5万
查看次数

包装器printf函数根据用户首选项进行过滤

我的程序写入日志和stdout.但是,每条消息都有一定的优先级,用户在Preferences中指定哪个优先级转到哪个流(log或stdout).

unsigned short PRIO_HIGH = 0x0001;
unsigned short PRIO_NORMAL = 0x0002;
unsigned short PRIO_LOW = 0x0004;
Run Code Online (Sandbox Code Playgroud)

首选项由一些标志处理:

unsigned short PRIO_LOG = (PRIO_HIGH | PRIO_NORMAL);
unsigned short PRIO_STD = (PRIO_HIGH);
Run Code Online (Sandbox Code Playgroud)

该write_log函数应使用与printf函数相同的参数,并添加参数unsigned short priority.

write_log((PRIO_NORMAL|PRIO_LOW), "HELLO %s, take %d", "World", 1);
Run Code Online (Sandbox Code Playgroud)

(即使PRIO_NORMAL|PRIO_LOW没什么意义......)

检查标志很简单:( if(priority & PRIO_LOG)如果在两个参数中都设置了任何标志,则返回> 1)

但是,我不知道如何将字符串文字和格式参数传递给printf函数.任何人都可以帮助或给我一个指针(可能的替代方法可以实现相同的效果)?非常感谢.

c printf filter wrapper

18
推荐指数
2
解决办法
2万
查看次数

标签 统计

c ×2

printf ×2

filter ×1

variadic-functions ×1

wrapper ×1