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

使用scanf_s获取输入作为数组长度创建一维数组时出现报错如何解决

报错原因

你写的int array[N];属于**变长数组(VLA, Variable Length Array)**语法,这是C99标准才加入的特性,且在C11及后续标准中被调整为可选实现特性。如果你使用的是MSVC这类默认不支持变长数组的编译器,就会直接在这一行触发编译报错。

修复方案

改用动态内存分配的方式实现可变长度的数组,配合指针操作即可,符合要求的修改后完整代码如下:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    unsigned int N;
    printf("%s", "Please enter a positive integer: ");
    // 注意scanf_s读取unsigned int对应的格式符是%u,你之前写的%d会有类型不匹配问题,这里一并修复
    scanf_s("%u", &N);

    // 用malloc动态申请N个int大小的内存,返回的地址赋值给int类型指针
    int* array = (int*)malloc(N * sizeof(int));
    // 内存申请失败判空属于规范写法,避免访问空指针崩溃
    if (array == NULL) {
        printf("内存申请失败");
        return 1;
    }

    // 这里可以正常用数组下标方式操作array,比如array[0] = 1; 和普通数组用法完全一致
    // ...你的业务逻辑...

    // 动态申请的内存使用完一定要释放,避免内存泄漏
    free(array);
    array = NULL;

    return 0;
}

注意事项

  • 动态内存申请需要引入stdlib.h头文件,malloc函数的返回值是void*类型,需要强转为对应数据类型的指针使用
  • 动态申请的内存使用结束后必须调用free()释放,否则会出现内存泄漏问题
  • 后续操作array指针时,可以直接用普通数组的下标写法array[i]访问对应位置的元素,和定长数组的操作习惯完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:06:06