2d массив в Struct - C - - PullRequest
       11

2d массив в Struct - C -

1 голос
/ 06 декабря 2011

Я пытаюсь присвоить массив моему letter.charData, но я получаю эту ошибку:

IntelliSense: выражение должно быть изменяемым lvalue

Я пытаюсь добавить массив массива 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 Ответ

5 голосов
/ 06 декабря 2011

_Letter::charData - это массив, а не указатель, поэтому вы не можете просто присвоить ему другой массив. Либо скопируйте содержимое arr в него с помощью memcpy, либо измените его тип на указатель:

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

Кроме того,

  1. Имена идентификаторов не должны начинаться с _, за которым следует заглавная
  2. NULL следует использовать только для указателей; используйте '\0' для символов, обычные 0 для целых чисел
  3. Вы не проверяете возвращаемое значение malloc для нуля
  4. Вы не освобождаете выделенную память.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...