2011-09-05 43 views
7
if(stat("seek.pc.db", &files) ==0) 
    sizes=files.st_size; 

sizes=sizes/sizeof(int); 
int s[sizes]; 

soy compilar esto en Visual Studio 2008 y estoy consiguiendo el error siguiente: error C2057: se espera constante de error expresión C2466: no se puede asignar una matriz de tamaño constante 0.de error: se esperaba expresión constante

Intenté usar vector s [size] pero no sirvió para nada. ¿Qué estoy haciendo mal?

Gracias!

+1

Sólo quería para notificar que es un problema dependiente del compilador, pruébelo con gcc (C99), su código será compilado. –

Respuesta

9

Los tamaños de las variables de matriz en C deben conocerse en tiempo de compilación. Si lo conoce solo en tiempo de ejecución, tendrá que memorizar algo de memoria en su lugar malloc.

+3

C99 tiene matrices de longitud variable (VLA), pero el compilador de Microsoft no las admite. (El error 'no se puede asignar una matriz de tamaño constante 0' puede ser simplemente el compilador confundido.) –

+0

Intenté asignar memoria por int * s = new int [sizes] ;. Me está dando el error System.AccessViolationException. ¿Es por esto? – Ava

+0

@Richa, eso suena más como algo .net que C. Y 'new int [size]' no es sintaxis C, es C++. –

4

El tamaño de una matriz debe ser una constante de tiempo de compilación. Sin embargo, C99 admite matrices de longitud variable. Así que en lugar de su código para trabajar en su entorno, si el tamaño de la matriz es conocido en tiempo de ejecución a continuación -

int *s = malloc(sizes); 
// .... 
free s; 

En cuanto el mensaje de error:

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. 
+0

¿Puedo inicializar el tamaño para que sea una variable en 'const int size = 5;'? – Ava

+0

@Richa - Debe inicializar una variable constante. No puedes realizar ningún tipo de tarea. http://ideone.com/D4L5r – Mahesh

+0

Intenté asignar memoria por 'int * s = new int [sizes];'. Me está dando el error System.AccessViolationException. ¿Es por esto? – Ava

Cuestiones relacionadas