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

先将数组大小初始化为0后让用户输入,程序为何无法正常工作?

为什么先初始化size为0再定义数组,无法得到用户指定大小的数组?

问题原因

  • 变长数组(VLA)的大小是在定义时就确定死的,后续修改size的值不会改变已创建数组的大小。你代码里int arr[size];执行时,size的值是0,所以数组的实际大小就是0。
  • 大小为0的数组属于C标准里的未定义行为,编译器可能允许编译,但运行时访问这种数组会直接触发内存越界,导致程序异常。

正确写法

方法1:先获取size再定义变长数组

先通过scanf拿到用户输入的size,再用这个值定义数组,同时要校验size的合法性:

int size;
// 先获取用户输入的数组大小
scanf("%d", &size);
// 确保size是正整数,避免非法大小
if (size <= 0) {
    printf("数组大小必须是正整数\n");
    return 1;
}
// 此时size是合法值,定义对应大小的数组
int arr[size];

方法2:使用动态内存分配(更灵活)

如果需要在程序运行中调整数组大小,或者担心栈内存不足(变长数组在栈上分配,太大容易栈溢出),可以用malloc动态分配内存:

int size;
scanf("%d", &size);
if (size <= 0) {
    printf("数组大小必须是正整数\n");
    return 1;
}
// 动态分配内存,注意检查分配是否成功
int *arr = malloc(size * sizeof(int));
if (arr == NULL) {
    printf("内存分配失败\n");
    return 1;
}
// 这里可以正常使用arr数组,比如赋值、访问元素
// 使用完毕后必须释放内存,避免内存泄漏
free(arr);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 06:29:53