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

如何在C语言VLA中输入n个元素并完成打印输出?

C语言VLA实现n个元素输入打印的正确方案

原代码问题分析

原代码核心错误是变长数组(VLA)的声明时机错误:你声明arr[n]时,n还没有通过scanf获取用户输入,此时n是未初始化的栈垃圾值,数组长度完全不可控,属于未定义行为。

符合VLA语法的正确实现

变长数组的声明必须放在长度变量n被正确赋值之后,修正后的代码如下:

#include <stdio.h>
// 打印数组所有元素
int main(){
    int n,i;

    printf("\n输入数组的元素个数:");
    scanf("%d",&n);
    int arr[n]; // 此时n已获取有效值,VLA长度声明合法

    printf("\n输入数组元素:");
    for(i=0; i < n; i++){
        scanf("%d",&arr[i]);
    }

    for(i=0; i < n; i++){
        printf("\n%d ",arr[i]);
    }

    return 0 ;
}

兼容性补充说明

VLA是C99标准引入的特性,C11及之后标准改为可选支持,如果你使用的编译器(比如MSVC)不支持VLA,可以改用malloc动态内存分配实现同等功能:

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

int main(){
    int n,i;
    printf("\n输入数组的元素个数:");
    scanf("%d",&n);
    int *arr = (int*)malloc(n * sizeof(int));
    if(arr == NULL) {
        printf("内存分配失败");
        return 1;
    }

    printf("\n输入数组元素:");
    for(i=0; i < n; i++){
        scanf("%d",&arr[i]);
    }

    for(i=0; i < n; i++){
        printf("\n%d ",arr[i]);
    }

    free(arr);
    return 0 ;
}

内容的提问来源于stack exchange,提问作者Mikael Ahlström

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:45:01