gpt4 book ai didi

c - 通过可变参数修改数组

转载 作者:行者123 更新时间:2023-12-02 16:05:14 26 4
gpt4 key购买 nike

我试图通过将 va_arg 的值传递给数组来通过变量参数修改数组,但由于某种原因它给出了奇怪的结果,这是代码:

#include <stdio.h>
#include <stdarg.h>

void get_args(double* args, int argc, ...);

void get_args(double* args, int argc, ...) {
va_list argv;
va_start(argv, argc);

if (argc == 1) {
args[0] = va_arg(argv, double);
}
else if (argc == 4) {
for (int i = 0; i < argc; i++) {
args[i] = va_arg(argv, double);
}
}

va_end(argv);
}

int main(void) {
double args[4] = { 0, 0, 0, 0 };
get_args(args, 4, 0, 1, 2, 3);

for (int i = 0; i < 4; i++) {
printf("args[%d] = %f\n", i, args[i]);
}

return 0;
}

在 Visual Studio (MSVC) 上,它给出以下内容:

args[0] = 0.000000
args[1] = 0.000000
args[2] = 0.000000
args[3] = -92559592143668871097826611732759620974286504571030640424648704.000000

在 GCC 上,它给出以下内容:

args[0] = 0.000000
args[1] = 0.000000
args[2] = 0.000000
args[3] = 0.000000

谁知道我做错了什么?

最佳答案

可变参数的类型与给定 va_arg 的类型不匹配。

您传递给 get_args 的参数,即 0, 1, 2, 3 都是 int 类型,但您当您尝试使用 va_arg 检索它们时使用 double 类型。这是触发 undefined behavior 的类型不匹配.

要么传递类型为double的参数:

get_args(args, 4, 0.0, 1.0, 2.0, 3.0);

或者使用 int 来提取参数:

args[i] = va_arg(argv, int);

关于c - 通过可变参数修改数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69589869/

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