如何在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
相关产品推荐
相关产品推荐

