gpt4 book ai didi

c - 为什么禁止变长数组: "C90 forbids variable length array"?

转载 作者:太空宇宙 更新时间:2023-11-04 00:26:33 25 4
gpt4 key购买 nike

我知道我不应该在 C90 中这样做,这是一个相当基本的东西。

char name[strlen(s)];

ArrayLength.c:11: warning: ISO C90 forbids variable length array ‘name’

他们要我专门使用 malloc 吗?我只是好奇它背后的逻辑。

最佳答案

这是被禁止的,因为 C90 不支持可变长度数组 (VLA)。就这么简单。

您的选择是:

  • 声明一个固定长度的数组,可以处理您要使用的最大字符串长度。
  • 动态分配数组(使用 malloc)。
  • 使用为 VLA 提供非标准语言扩展的编译器,例如海湾合作委员会。 (我不推荐这样做,因为这意味着您最终将编写不可移植的代码。)
  • 改用支持 VLA 的 C99。请注意,VLA 是在堆栈上分配的,如果您用完了堆栈空间,这可能会导致各种问题(与 malloc 不同,没有能够检查分配是否成功的概念)。

[注意:如果您正在分配数组以复制,您需要使用 strlen(s)+1 作为大小(记住空终止符)。]

关于c - 为什么禁止变长数组: "C90 forbids variable length array"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8596239/

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