gpt4 book ai didi

C vfprintf 函数不适用于字符串参数

转载 作者:太空宇宙 更新时间:2023-11-04 02:15:58 29 4
gpt4 key购买 nike

我正在尝试以下列方式使用 vfprintf
vfprintf(fp,缓冲区,arg);我使用运行的日期和时间、缓冲区和其余参数创建的 fp 日志文件

fp = fopen(filename, "a");
va_start(arg, message);
vprintf(message, arg); // print stdout
vfprintf(fp, buffer, arg); // print to file
va_end(arg);
fclose(fp);

它可以完美地处理数字,并且由于错误而可怕地死掉:vfprintf source not found at ....

有没有人知道我做错了什么?

最佳答案

您可能正在使用 64 位架构,其中可变长度 arg 只能传递一次。要使用 va_copy() 复制 arg 进行更多传递:

va_list arg, arg2;
va_start(arg, message);
va_copy(arg2, arg);
vprintf(message, arg); // print stdout
va_end(arg);
vfprintf(fp, buffer, arg2); // print to file
va_end(arg2);

来自 man va_arg:

The va_arg() macro expands to an expression that has the type and value of the next argument in the call. The argument ap is the va_list ap initialized by va_start(). Each call to va_arg() modifies ap so that the next call returns the next argument. The argument type is a type name specified so that the type of a pointer to an object that has the specified type can be obtained simply by adding a * to type.

...

If ap is passed to a function that uses va_arg(ap,type) then the value of ap is undefined after the return of that function.

关于C vfprintf 函数不适用于字符串参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7686133/

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