Rab*_*ios 2 c variadic-functions
我试图通过将值传递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;
}
Run Code Online (Sandbox Code Playgroud)
在 Visual Studio (MSVC) 上,它给出以下内容:
args[0] = 0.000000
args[1] = 0.000000
args[2] = 0.000000
args[3] = -92559592143668871097826611732759620974286504571030640424648704.000000
Run Code Online (Sandbox Code Playgroud)
在 GCC 上,它给出以下内容:
args[0] = 0.000000
args[1] = 0.000000
args[2] = 0.000000
args[3] = 0.000000
Run Code Online (Sandbox Code Playgroud)
有人知道我犯了什么错误吗?
可变参数的类型与指定的类型不匹配va_arg。
get_args您传递给ie的参数0, 1, 2, 3都是 type ,但是当您尝试使用 检索它们时,int您正在使用 type 。这是类型不匹配,会触发未定义的行为。doubleva_arg
传递具有类型的参数double:
get_args(args, 4, 0.0, 1.0, 2.0, 3.0);
Run Code Online (Sandbox Code Playgroud)
或者用int以下方法来论证:
args[i] = va_arg(argv, int);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |