gpt4 book ai didi

c - C 中可变参数的奇怪输出

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

#include <stdio.h>
#include <stdarg.h>
void f(int parameter, ...)
{
va_list ap;
int j;
va_start(ap, parameter);
for (j = parameter; j >= 0; j = va_arg(ap, int))
printf("%d ", j);
va_end(ap);
printf("\n");
}

int main()
{
f(1, 2, 3, 4);
f(1, 2);
f(1);
}

我写了这段代码,但是输出很奇怪,谁能告诉我原因。输出:

esekilvxen245 [10:54am] [/home/elqstux/useful] -> ./a.out
1 2 3 4 1748292352 1748370624
1 2 1748295184 1745597392
1 10 1748295184 1745597392

最佳答案

循环的结束条件是 j 小于零,但您在调用中不以负数结束参数列表。这意味着循环将继续,直到找到一个负数,该负数可以位于堆栈中远远超出您传递的参数的任何位置。

像这样调用它

f(1, 2, 3, 4, -1);

关于c - C 中可变参数的奇怪输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23264295/

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