ошибка: ожидаемое выражение перед маркером '{' при назначении массива символов - PullRequest
1 голос
/ 10 февраля 2020

Я получаю ошибку при назначении массива символов в моем объекте. Как я могу устранить эту ошибку?

typedef struct car {
    int id;
    char *name;
    int price;
    char *colors[5];
} car;

int main()
{
    car obj;
    obj.id = 5;
    obj.name = "honda city zx";
    obj.price = 1500;
    obj.colors = {"red", "blue", "black"};   // Line 17

    return 0;
}

Ошибка:

prtemp.c: In function ‘main’:
prtemp.c:17:18: error: expected expression before ‘{’ token
     obj.colors = {"red", "blue", "black"};

Ответы [ 3 ]

1 голос
/ 10 февраля 2020

= { ... } - инициализатор; это разрешено только в определении.

Так что либо перенесите инициализацию в определение

car obj = {
   .id     = 5,
   .name   = "honda city zx",
   .price  = 1500,
   .colors = { "red", "blue", "black" }
};

, либо используйте присваивание.

car obj;
obj.id = 5;
obj.name = "honda city zx";
obj.price = 1500;
obj.colors[0] = "red";
obj.colors[1] = "blue";
obj.colors[2] = "black";
obj.colors[3] = NULL;
obj.colors[4] = NULL;
1 голос
/ 10 февраля 2020

Массивы не имеют оператора присваивания. Так что это утверждение

obj.colors = {"red", "blue", "black"}; 

неверно. Вы должны написать

obj.colors[0] = "red";
obj.colors[1] = "blue";
obj.colors[2] = "black"; 
obj.colors[3] = NULL;
obj.colors[4] = NULL;

Другой подход заключается в инициализации объекта при создании.

car obj =
{
    5, "honda city zx", price = 1500, {"red", "blue", "black" }
};

Или вы можете использовать так называемую назначенную инициализацию ..

 car obj =
 {
    .id = 5, .name = "honda city zx", .price = 1500, .colors = { "red", "blue", "black" }
 };     
0 голосов
/ 10 февраля 2020

Вы можете достичь того же, используя

car obj = {5, "honda city zx", 1500, {"red", "black", "blue"}};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...