Присвоение слова «Привет» массиву chr в C

#c #arrays

#c #массивы

Вопрос:

В C это законно и будет скомпилировано:

 char names[5] = "Hello";
  

но это не:

 char names[5];

names = "Hello";
  

Как мне поместить присвоение в массив символов слова «Привет»? Могу ли я сделать это без strcpy ?

Комментарии:

1. ваша строка имен должна состоять как минимум из 6 символов, 5 1 (для ‘ 0’)

Ответ №1:

Ты не можешь. В C массив не является значением lvalue, поэтому вы не можете присвоить ему значение.

Единственные способы сделать это:

  • Используйте функцию копирования (например, memcpy или strcpy )
  • Назначьте все элементы по одному за раз (eew)
  • Используйте указатель вместо массива. Существует некоторое народное знание о том, что «массив — это просто указатель». Это не правда (да, это 3 ссылки).

Комментарии:

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] = «Привет»; вы перезаписываете память, лучше написать имена символов [] = …