2011-12-01 26 views
0

我想malloc一個字符在每個單元格中有一個字母的行和列。類似於int x [i] [j]的地方,我有i * rows和j *列。基本上,我想使這個:malloc a char [] []

 |  
    1 
    222 
    33333 
    4444444 

我與此代碼嘗試,但它給了我一個錯誤:賦值時將指針的整數,未作鑄

A=(char**) malloc (5*sizeof(char*)); 
for(i=0;i<N+2;i++)`{ 
    A[i]=(char*) malloc(7*sizeof(char)); 
} 
for(i=0;i<3;i++){ 
    for(j=0;j<7;j++){ 
     left=3; 
     right=3; 
     if((j>=left)&&(j<=right)){ 
      A[i][j]=i; 
     } 
    } 
    left--; 
    right++; 
} 
+3

你在哪一行得到錯誤?所有變量的類型是什麼? – interjay

+0

請添加'A'的定義。 –

+0

剩下的目的是什麼 - 在for(j ...)之外?不應該離開= 3在兩個for-directives之外不要共謀? –

回答

1

編譯沒有對我來說,只要正如我在代碼片段中添加的那樣;注意「A」被聲明爲「char **」類型。如果你寫的話,它將不起作用,比如說「char A [] []」。

#include <stdlib.h> 

int main() { 
    const int N = 10; 
    int i, j, left, right; 
    char **A; 
    /* your code */ 
    return 0; 
} 
3

我會去與不同的方法:

#define STEPS  5 
#define ARRAY_SIZE STEPS*STEPS 

在你的情況下,陣列的大小可通過上面的公式很容易計算。
現在,你只需要分配固定大小的字節,並填充它。而已。更重要的是,下面的版本在簡單性和性能上會超越你的版本。

int i, j; 
char *array; 

array = malloc(ARRAY_SIZE); 
for (i = 0; i < STEPS; i++) 
    for (j = 0; j < (i * 2 + 1); j++) 
     *(array + i * STEPS + j) = i + 1; 

Proof

相關問題