gpt4 book ai didi

c++ - 用另一个函数封装printf和vfprintf时造成这种差异的原因是什么?

转载 作者:太空狗 更新时间:2023-10-29 20:04:19 24 4
gpt4 key购买 nike

在这个例子中,这段代码虽然编译它并没有产生正确的结果:

void encapsulatePrintf(const char *str, ...) {
va_list argptr;
va_start(argptr, str);
printf(str, argptr);
va_end(argptr);
}

然后在 main 中:encapsulatePrintf("test str: %i - %s", 22, "test2");

  • 结果是内存中某处的随机字节形式:test str: 2293428 - á "

但是当我将函数从 printf 更改为 vfprintf(stdout, str, argptr);

  • 所有输出都正常。

这是怎么回事?

最佳答案

printf() 不接受 va_list 作为参数,而是一个变量列表,而 vprintf() 接受一个 va_list 作为参数而不是可变参数列表。基本上,当您使用

调用 printf()
printf(str, argptr);

您调用了未定义的行为:第一个参数 promise 您将传递 intchar* 但您传递的是 va_list。传递给 printf() 的参数类型必须与格式字符串中的规范相匹配。

关于c++ - 用另一个函数封装printf和vfprintf时造成这种差异的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20623475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com