gpt4 book ai didi

c - 我如何通过 C90 中的函数传递 va_list

转载 作者:太空宇宙 更新时间:2023-11-04 00:41:38 25 4
gpt4 key购买 nike

我想将 va_list 传递给另一个函数。这是我正在尝试做的一个例子:

void my_printf_1(char* string, ...) {
va_list ap;
va_start(ap, string);
printf(string, ap);
va_end(ap);
}

void my_printf_2(char* string, ...) {
va_list ap;
va_start(ap, string);
printf(string, *ap);
va_end(ap);
}

int main(void) {
my_printf_1("Hello %i\n", 12); //Shows me the pointer
my_printf_1("Hello \n"); //Runtime Error - too many arguments
my_printf_2("Hello %i\n", 12); //Displays correctly because 12 < char
my_printf_2("Hello %i\n", 500); //Displays incorrectly because 500 > char
my_printf_2("Hello %i %i\n", 12, 12); //Displays 12, then crashes Runtime Error not enough arguments
my_printf_2("Hello \n"); //Runtime Error - too Many Arguments
}

在我看来,我的 va_list ap 是一个 char 指针,我怎样才能得到整个列表?我如何重写 my_printf() 以将整个或伪造的 va_list 传递给子函数?我无法修改我的子函数以接受 va_list 指针,因此我将不得不修改 my_printf

编辑:我意识到以下内容会起作用,但这不是我想要的。

void my_printf_1(char* string, ...) {
va_list ap;
va_start (ap, string);
vprintf(string, ap);
va_end(ap);
}

最佳答案

您需要按照您说的去做,但要明确。即传递实际的va_list对象。

参见 <a href="http://linux.die.net/man/3/sprintf" rel="noreferrer noopener nofollow">vsnprintf()</a>灵感的功能。采用显式 va_list 的函数通常以 v 为前缀在标准库中。

va_list没有可以使用的内部结构,它是不透明的。您所能做的就是在 <a href="http://linux.die.net/man/3/stdarg" rel="noreferrer noopener nofollow"><stdarg.h></a> 中定义标题。

关于c - 我如何通过 C90 中的函数传递 va_list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5818450/

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