Ошибка во время объявления строки - PullRequest
0 голосов
/ 05 июня 2011

Почему

char line[10] = "1234";

отлично работает, но

char line[10];
line = "1234";

бросает

error: incompatible types in assignment

ошибка

Ответы [ 3 ]

5 голосов
/ 05 июня 2011

Массивы не указатели.Во втором примере line - это немодифицируемое lvalue, но, что более важно, независимо от того, что вы помещаете в правую часть, оно не может иметь тип char [10] (потому что массивы распадаются на указатели в контексте без lvalue)и, следовательно, типы никогда не могут совпадать.

Что бы ни стоило, строковый литерал имеет тип char [N], а не const char [N] и особенно не const char *, несмотря на тот факт, что попытки изменить его вызывают неопределенное поведение,(Здесь N - длина цитируемого текста в байтах, включая добавленный нулевой терминатор.)

1 голос
/ 05 июня 2011

Первая строка работает, потому что она выполняет инициализацию массива char с данными. Это будет так же, как:

char line[10] = {'1', '2', '3', '4', '\0'};

Во втором примере тип "1234" равен const char*, поскольку это указатель на постоянный массив char. Вы пытаетесь присвоить const char* char*, что недопустимо. Правильный способ присвоения постоянной (или другой) строки строковой переменной - использовать strcpy, strncpy или любую другую функцию обработки строк.

0 голосов
/ 05 июня 2011

Потому что таковы правила языка, как объяснили другие. Я бы написал так вот так и не стал бы заранее объявлять, сколько символов.

const char* line = "1234";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...