if(stat("seek.pc.db", &files) ==0)
sizes=files.st_size;
sizes=sizes/sizeof(int);
int s[sizes];
我编译这在Visual Studio 2008和我得到以下错误: 错误C2057:预期常量表达式 错误C2466:不能分配恒定大小为0错误C2057:预期常量表达式
的阵列我试过使用矢量s [尺寸]但无济于事。我究竟做错了什么?
谢谢!
if(stat("seek.pc.db", &files) ==0)
sizes=files.st_size;
sizes=sizes/sizeof(int);
int s[sizes];
我编译这在Visual Studio 2008和我得到以下错误: 错误C2057:预期常量表达式 错误C2466:不能分配恒定大小为0错误C2057:预期常量表达式
的阵列我试过使用矢量s [尺寸]但无济于事。我究竟做错了什么?
谢谢!
C中数组变量的大小在编译时必须已知。如果你只是在运行时才知道它,你将不得不malloc
而不是你自己。
C99确实有可变长度数组(VLA),但是Microsoft的编译器不支持它们。 ('不能分配一个常量大小为0的数组错误可能只是编译器被混淆了。) –
我试图通过int * s = new int [sizes];来分配内存。它给我System.AccessViolationException错误。是因为这个吗? – Ava
@Richa,听起来更像是.net而不是C。而'new int [size]'不是C语法,而是C++。 –
数组的大小必须是编译时间常量。但是,C99支持可变长度数组。因此,而不是你的代码在你的环境中工作,如果数组的大小在运行时则称为 -
int *s = malloc(sizes);
// ....
free s;
关于错误消息:
int a[5];
//^5 is a constant expression
int b = 10;
int aa[b];
//^ b is a variable. So, it's value can differ at some other point.
const int size = 5;
int aaa[size]; // size is constant.
只是想通知它一个依赖于编译器的问题,用gcc(C99)试一试,你的代码将被编译。 –