c - C 中的动态内存分配,无需 malloc

标签 c arrays dynamic-memory-allocation

这是我的一位 friend 编写的 C 程序。 据我所知,在 C99 引入 VLA 之前,数组必须在编译时初始化,或者在运行时使用 malloc

但这里程序接受来自用户的 const 值并相应地初始化数组。 即使使用 gcc -std=c89 也能正常工作,但对我来说看起来非常错误。 这一切都依赖于编译器吗?

#include <stdio.h>

int
main()
{
 int const n;
 scanf("%d", &n);
 printf("n is %d\n", n);
 int arr[n];
 int i;
 for(i = 0; i < n; i++)
   arr[i] = i;
 for(i = 0; i < n; i++)
   printf("%d, ", arr[i]);
 return 0;
}

最佳答案

-pedantic 添加到您的编译选项(例如 -Wall -std=c89 -pedantic),gcc 会告诉您:

警告:ISO C90 禁止可变长度数组“arr”

这意味着你的程序确实不符合c89/c90。

-pedantic 更改为 -pedantic-errorsgcc 将停止翻译。

关于c - C 中的动态内存分配,无需 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19208834/

相关文章:

java - 数组不保存信息

c++如何对结构数组进行排序

c - 执行排序和搜索 C 函数时出错

c - C中指针的内存分配

C:为什么将 int 转换为 float 输出 0.000?

c - x11 中指向子窗口的指针

c - C 中的字符串到 vector ,程序接收到信号 SIGSEGV,段错误

C++ vector : push_back an array of int => Does array get copied?

c++ - 4 维 c++ 数组的动态内存分配以创建 HDF5 数据集

C-Linux-如何将C参数值发送给awk脚本?