2010-06-21 77 views

回答

71

我假設你正在使用C99編譯器(支持動態大小的數組)。你的代碼中的問題是,當編譯器看到你的變量聲明時,它不知道數組中有多少元素(我在這裏也假定,從編譯器錯誤length不是編譯時間常量)。

您必須手動初始化數組:

int boardAux[length][length]; 
memset(boardAux, 0, length*length*sizeof(int)); 
+0

我也可以用於這個目的malloc,那麼第二個問題呢,我在Pavel的回覆後寫了它 – helloWorld 2010-06-21 08:10:28

+0

@helloWorld:使用堆棧分配數組,'printf(「%d」,boardAux [1] [2])'編譯精細。編譯器知道尺寸並知道內存中第(1,2)個元素的位置。如果使用動態分配,數組是單維的,並且您必須自己執行數學運算:'printf(「%d」,boardAux [1 * length + 2])' – 2010-06-21 08:39:12

+0

@AndreyT:感謝將錯誤指向'memset '喊出來。我剛剛糾正了它。 – 2010-06-21 08:39:45

-5

你不能這樣做。 C編譯器不能在堆棧上做這麼複雜的事情。

您必須使用堆和動態分配。

你真的需要做什麼:

  • 計算大小(N的sizeof(元素))內存的需要
  • 調用malloc(大小)來分配內存
  • 創建訪問者:int * access(ptr,x,y,rowSize){return ptr + y * rowSize + x; }

使用* access(boardAux,x,y,size)= 42與矩陣進行交互。

+0

還有一個問題,爲什麼我會收到一個錯誤無效使用數組與未指定的界限?012fprintf(「%d」,board [i] [j]); – helloWorld 2010-06-21 08:00:51

+7

-1 C99允許在堆棧中作爲用戶代碼進行動態分配(不包括初始化)。沒有必要執行動態分配。 – 2010-06-21 08:02:15

+0

@helloWorld因爲數組維必須被知道。 – 2010-06-21 08:55:39

17

您收到此錯誤,因爲在C語言中你不能使用帶有變長數組初始化。你得到的錯誤信息基本上說明了一切。

6.7.8 Initialization

...

3 The type of the entity to be initialized shall be an array of unknown size or an object type that is not a variable length array type.

+0

你在哪裏找到這個,你能給我一個鏈接嗎? – helloWorld 2010-06-21 08:11:42

+1

@helloWorld:這是來自語言標準(C99)。你可以在這裏獲得TC3更新的「工作」副本http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf – AnT 2010-06-21 08:13:10

+3

有些主題,如果你有一些人總是不相信你只提供非正式的解釋。可變長度數組是其中的一個主題。 +1用於引用標準。 – 2010-06-21 08:30:25

6

這給了錯誤:

int len; 
scanf("%d",&len); 
char str[len]=""; 

這也給了錯誤:

int len=5; 
char str[len]=""; 

但是這工作得很好:

int len=5; 
char str[len]; //so the problem lies with assignment not declaration 

你需要把值以下方式:

str[0]='a'; 
str[1]='b'; //like that; and not like str="ab"; 
0

簡單地聲明長度是一個缺點,如果它不是,那麼你應該分配內存動態

+2

我想你需要查看const的意思! – Holger 2016-09-29 17:21:28

1

聲明陣列

int boardAux[length][length]; 

分配初始值爲零的最簡單的方法後正在使用for循環,即使它可能有點冗長

int i, j; 
for (i = 0; i<length; i++) 
{ 
    for (j = 0; j<length; j++) 
     boardAux[i][j] = 0; 
} 
1

對於C++單獨聲明和初始化像t他的..

int a[n][m] ; 
a[n][m]= {0}; 
相關問題