gpt4 book ai didi

c - 设置数组的大小

转载 作者:行者123 更新时间:2023-11-30 21:37:22 25 4
gpt4 key购买 nike

我正在解决一个问题。在我的代码中我有两个数组大批[];数组2[];

我通过 scanf 输入 2 个数字,我希望数组的大小为数字 1 和 2 的计数,例如

int x;
int y;
scanf(" %d %d\n",&x,&y);
int indexX[x*y];
int indexY[x*y];

这不起作用。作为 C 新手,我完全不知道如何实现它,这是动态分配内存的唯一方法吗?如果没有,我怎样才能达到想要的结果?或者我如何动态为其分配内存?我的代码抛出错误

warning: ISO C++ forbids variable length array ‘indexX’ [-Wvla]
warning: ISO C++ forbids variable length array ‘indexY’ [-Wvla]

最佳答案

根据您的错误消息,您使用C++编译器进行编译。不要! C 不是 C++,C++ 也不是带有类的 C。它们是不同的语言。正如消息所述,C++ 不提供 VLA(见下文)。

使用符合标准的 C 编译器,或者至少是 C99 编译器。 可变长度数组 (VLA) 是随标准的 C99 版本添加的,作为强制功能。 C11 通过使其可选来放宽了这一点,但大多数(如果不是全部)支持 C99 的编译器也以 C11 模式实现它。

在定义数组之前,您应该通过检查 scanf 的结果来验证 scanf 是否确实设置了这两个变量。否则,您将使用未初始化的变量,这是未定义的行为,并且最多可能(可能会)导致奇怪的行为。此外,您还可以将 scanf 之前的变量初始化为 1(大小为 0 的 VLA 也是未定义行为)。这样您就可以稍后检查并且仍然可以安全地使用 VLA 定义。

警告:大多数(如果不是全部)现代实现都将 VLA 放在堆栈上。堆栈的大小通常限制在大约 100 个字节(嵌入式系统)到大约 MiB(标准操作系统,如 Windows、OS-X、Linux)。不会检查 VLA 是否适合堆栈,因此不应分配太大的数组。如果您不确定,最好使用动态分配的内存(malloc 等)。

关于c - 设置数组的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33860334/

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