You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言使用可变参数va_arg修改数组出现异常输出问题求助

错误原因

你的代码触发了C语言标准定义的未定义行为,核心问题是va_arg读取的类型和实际传入的可变参数类型不匹配:

  • 你在main函数调用get_args时,传入的可变参数0、1、2、3都是int类型字面量
  • 在get_args内部你通过va_arg(argv, double)尝试将这些参数按double类型读取,两种类型的内存长度、存储布局完全不同,自然会读取到错误值。

不同编译器输出不一致是未定义行为的典型表现,标准没有对这类错误的处理做强制要求,不同编译器的底层处理逻辑不同,就会出现MSVC输出乱码值、GCC输出全0的差异。

修复方案

你可以任选以下一种方案修改:

  • 方案1:调用函数时传入double类型的参数,给整数字面量添加.0后缀即可:
get_args(args, 4, 0.0, 1.0, 2.0, 3.0);
  • 方案2:保持传入int类型参数不变,修改va_arg的读取类型为int,再转换为double赋值给数组:
args[i] = (double)va_arg(argv, int);

修改后运行即可得到预期输出:

args[0] = 0.000000
args[1] = 1.000000
args[2] = 2.000000
args[3] = 3.000000

内容的提问来源于stack exchange,提问作者Rabios

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:09:04