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

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

sto compilando questo in Visual Studio 2008 e sto ottenendo il seguente errore: error C2057: costante errore di espressione previsto C2466: non può allocare un array di costanti grandezza 0.Errore C2057: espressione costante previsto

Ho provato a utilizzare le s [dimensioni] dei vettori, ma senza risultato. Che cosa sto facendo di sbagliato?

Grazie!

+1

Volevo solo comunicare che si tratta di un problema dipendente dal compilatore, provalo con gcc (C99), il tuo codice verrà compilato. –

risposta

9

Le dimensioni delle variabili di matrice in C devono essere note al momento della compilazione. Se lo conosci solo in fase di esecuzione, dovrai, invece, avere un po 'di memoria da parte di malloc.

+3

C99 ha array a lunghezza variabile (VLA), ma il compilatore di Microsoft non li supporta. (L'errore 'non può allocare un array di dimensioni costanti 0' potrebbe essere solo il compilatore che viene confuso.) –

+0

Ho provato ad allocare memoria con int * s = new int [dimensioni] ;. Mi sta dando errore System.AccessViolationException. È per questo? – Ava

+0

@Richa, sembra più qualcosa di .net di C. E 'new int [size]' non è la sintassi C, è C++. –

4

La dimensione di un array deve essere una costante di tempo di compilazione. Tuttavia, C99 supporta matrici di lunghezza variabile. Così, invece per il codice per lavorare al vostro ambiente, se la dimensione della matrice è nota in fase di esecuzione, allora -

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

Per quanto riguarda il messaggio di errore:

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

Posso inizializzare la dimensione come variabile in 'const int size = 5;'? – Ava

+0

@Richa - È necessario inizializzare una variabile costante. Non è possibile eseguire alcun tipo di incarico ad esso. http://ideone.com/D4L5r – Mahesh

+0

Ho provato ad allocare memoria con 'int * s = new int [dimensioni];'. Mi sta dando errore System.AccessViolationException. È per questo? – Ava

Problemi correlati