Ошибка несовместимых типов Си при присвоении переменной того же типа - PullRequest
1 голос
/ 10 августа 2011

У меня следующий код:

typedef unsigned char some_type[6];

int main() {
        some_type some_var1;
        some_type some_var2;
        some_var1 = some_var2;
        return 0;
}

И когда я пытаюсь скомпилировать его, я получаю следующее сообщение об ошибке:

incompatible types when assigning to type 'some_type' from type 'unsigned char *'

Почему это так?Обе переменные одного типа?Что я могу сделать, чтобы это работало?Я не могу изменить typedef, так как он является частью API, который я использую.

Ответы [ 4 ]

5 голосов
/ 10 августа 2011

Вы не можете назначать массивы друг другу таким образом.Если это строки, используйте strcpy:

strcpy(some_var1, some_var2);

Если нет, используйте memcpy:

memcpy(&some_var1, &some_var2, sizeof (some_type));
4 голосов
/ 10 августа 2011

Массивы не могут быть скопированы таким образом. Обычный способ копирования массивов - использование memcpy.

1 голос
/ 10 августа 2011

Вы не можете назначить один массив другому, потому что массивы распадаются на постоянные указатели.Кроме того, вы, вероятно, не захотите просто скопировать адрес одного массива в другую переменную.Вам нужно будет использовать что-то вроде memcpy.

0 голосов
/ 10 августа 2011

Вы должны использовать memcpy для этого, так как C на самом деле не поддерживает копирование структур таким способом.

memcpy(&some_var1, &some_var2, sizeof(some_var));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...