#c #arrays
#c #массивы
Вопрос:
В C это законно и будет скомпилировано:
char names[5] = "Hello";
но это не:
char names[5];
names = "Hello";
Как мне поместить присвоение в массив символов слова «Привет»? Могу ли я сделать это без strcpy
?
Комментарии:
1. ваша строка имен должна состоять как минимум из 6 символов, 5 1 (для ‘ 0’)
Ответ №1:
Ты не можешь. В C массив не является значением lvalue, поэтому вы не можете присвоить ему значение.
Единственные способы сделать это:
Комментарии:
1. Спасибо. Тогда я попробую что-нибудь еще.
Ответ №2:
Ваша names
строка должна содержать не менее 6 (не 5) символов из-за завершающего нулевого байта:
char names[6];
Либо с помощью strcpy
, либо с помощью эквивалентного кода, например
names[0] = 'H';
names[1] = 'e';
names[2] = 'l';
names[3] = 'l';
names[4] = 'o';
names[5] = (char)0;
И последняя версия gcc
(т. е. 4.6), при запросе достаточной оптимизации ( -O2
), будет оптимизирована strcpy(names,"Hello");
в эквивалент приведенного выше кода.
Ответ №3:
В вашем коде будут проблемы. Строки C имеют дополнительный нулевой символ в конце. Для «Hello» требуется 6 байт. Я полагаю, что ваша строка «Hello» в первом примере превратится в «Ад».
Комментарии:
1. перечисление начинается с 0, так что на самом деле есть 6 мест для символов.
2. @Edgar нет, вы зарезервировали 5 символов, и это то, что вы получаете, волшебным образом не добавляется дополнительный символ, так что действительно с вашими именами символов [5] = «Привет»; вы перезаписываете память, лучше написать имена символов [] = …