2011-12-06 22 views
1

イム私のletter.charDataに配列を代入しようとしているが、私はこのエラーを取得:2D配列 - C -

のIntelliSense:式は修正可能な左辺値でなければなりません

イム私の配列arrを追加しよう文字に.charData

ありがとうございます!

struct _Letter{ 
    char character; 
    int width; 
    int charData[8][5]; 
}; 

typedef struct _Letter Letter; 

Letter *allocLetter(void) 
{ 
    Letter *letter; 

    letter = (Letter*) malloc(1 * sizeof(Letter)); 

    letter->character = NULL; 
    letter->width = NULL; 

    /* charData? */ 

    return letter; 
} 

int main(void) 
{ 
    Letter letter = *allocLetter(); 

    int arr[8][5] = 
    { 
     0,0,0,0,0, 
     1,0,0,0,0, 
     1,0,0,0,0, 
     1,0,0,0,0, 
     1,0,0,0,0, 
     1,0,0,0,0, 
     1,0,0,0,0, 
     1,0,0,0,0 
    }; 

    letter.character = '1'; 
    letter.charData = arr; 

    return(0); 
} 
+1

わかりませんが、私は '_L ...'が予約されていると思います。名前は 'Letter_'なのか何か。 – Pubby

+0

代わりに、arrを文字と共にallocLetterに渡すのはなぜですか?文字* allocLetter(int ** arr、char ch)を読み込み、そこにstructにコピーして初期化します。 –

答えて

5

_Letter::charDataは、ポインタではなく配列であるため、別の配列を割り当てることはできません。 memcpyでそれにarr年代の内容をコピー、またはポインタにそのタイプを変更するか:

typedef struct { 
    char character; 
    int width; 
    int (*charData)[5]; 
} Letter; 

また、

  1. 識別子名は、資本
  2. NULL続い_で始めるべきではありませんポインタのためだけに使うべきです。あなたが割り当てられたメモリを解放していないヌル
  3. ためmallocの戻り値をチェックしていない整数
  4. のために、文字の'\0'を使用平野0