关于VC中数组初始化的问题

来源:百度知道 编辑:UC知道 时间:2024/06/04 06:32:22
我使用VC++6.0,初始化数组时数组的长度和内容都要由外部输入,如下面一个例子:
int i;

printf( "Input the size and the number :\n" );

scanf( "%d", &n );
int A[ n ];

for ( i = 0; i < n; i++ ) {
scanf( "%d", &A[ i ] );
}
但在调试时却提示多个error和warning;
当我用DEV-CPP调试却可以.
请问高手如何在VC中解决这个问题,小弟初学,术语可能有用不对的地方,请意会.

int i;

printf( "Input the size and the number :\n" );

scanf( "%d", &n );
int A[ n ];
这样肯定是不行的,只能在一起定义,中间不能有其他语句。n应该是常量。
如果你要在不知道数组元素个数的情况下定义,那只能动态定义了。
比如:
#include <stdio.h>
#include <stdlib.h>
void main()
{
int i, *p,size;
printf("请输入数组中的元素个数:");
scanf("%d",&size);
p=(int*)malloc(size*sizeof(int));
printf("请输入数组中的元素:");
for(i=0;i<size;i++)
scanf("%d",p+i);
printf("数组元素输出:\n");
for(i=0;i<size;i++)
printf("%d",*(p+i));
free(p);
}
希望对你有帮助。

是这样的。

在vc6.0中 .C文件是按照C90的标准编译的,而C90中数组被定义为静态,也就是说需要在编译阶段给出确切的尺寸,从而在内存中划分大小。
所以你这种在运行后给出输入数组尺寸的做法无法通过。

而在最新的C99标准中支持了这种运行阶段给出大小的“动态”数组(实现原理比较靠近底层,请参考汇编理解),所以一般新的GCC编译器都能支持这种编译方法。
但VC6.0是不支持的,估计2005年以后微软推出的VC系列编译器VC7.0VC8.0就可能支持了。我没用过……

而你所用的DEV-CPP,实际的编译应该是