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

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

Tôi đang biên soạn này trong Visual Studio 2008 và tôi nhận được lỗi sau: lỗi C2057: dự kiến ​​liên tục biểu lỗi C2466: không thể phân bổ một mảng có kích thước cố định 0.Lỗi C2057: dự kiến ​​biểu thức hằng

Tôi đã thử sử dụng [kích cỡ] của véc tơ nhưng không có kết quả. Tôi đang làm gì sai?

Cảm ơn!

+1

Chỉ muốn thông báo rằng nó là một vấn đề phụ thuộc trình biên dịch, hãy thử nó với gcc (C99), mã của bạn sẽ được biên dịch. –

Trả lời

9

Kích thước của các biến mảng trong C phải được biết tại thời gian biên dịch. Nếu bạn biết nó chỉ trong thời gian chạy, bạn sẽ phải tự mình thay vào đó là malloc một số bộ nhớ.

+3

C99 có các mảng có độ dài thay đổi (VLAs), nhưng trình biên dịch của Microsoft không hỗ trợ chúng. (Lỗi 'không thể cấp phát một mảng có kích thước không đổi 0' có thể chỉ là trình biên dịch bị nhầm lẫn.) –

+0

Tôi đã cố gắng cấp phát bộ nhớ bằng int * s = new int [sizes] ;. Nó cho tôi lỗi System.AccessViolationException. Có phải vì điều này? – Ava

+0

@Richa, có vẻ giống như một cái gì đó. Net hơn C. Và 'int mới [kích thước]' không phải là cú pháp C, đó là C + +. –

4

Kích thước của mảng phải là hằng số thời gian biên dịch. Tuy nhiên, C99 hỗ trợ các mảng chiều dài thay đổi. Vì vậy, thay vì cho mã của bạn để làm việc trên môi trường của bạn, nếu kích thước của mảng được biết đến tại thời gian chạy rồi -

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

Về thông báo lỗi:

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

Tôi có thể khởi tạo kích thước thành biến trong 'const int size = 5;'? – Ava

+0

@Richa - Bạn phải khởi tạo biến không đổi. Bạn không thể thực hiện bất kỳ loại nhiệm vụ nào cho nó. http://ideone.com/D4L5r – Mahesh

+0

Tôi đã cố gắng cấp phát bộ nhớ bằng 'int * s = new int [sizes];'. Nó cho tôi lỗi System.AccessViolationException. Có phải vì điều này? – Ava

Các vấn đề liên quan