Ошибка присвоения массива С++: недопустимое назначение массива

Я не программист на С++, поэтому мне нужна помощь с массивами. Мне нужно назначить массив символов для некоторой структуры, например.

struct myStructure {
  char message[4096];
};

string myStr = "hello"; // I need to create {'h', 'e', 'l', 'l', 'o'}

char hello[4096];
hello[4096] = 0;
memcpy(hello, myStr.c_str(), myStr.size());

myStructure mStr;
mStr.message = hello;

Я получаю error: invalid array assignment

Почему это не работает, если mStr.message и hello имеют один и тот же тип данных?

Ответы

Ответ 1

Поскольку вы не можете назначить массивы - это не изменяемые значения l. Использовать strcpy:

#include <string>

struct myStructure
{
    char message[4096];
};

int main()
{
    std::string myStr = "hello"; // I need to create {'h', 'e', 'l', 'l', 'o'}
    myStructure mStr;
    strcpy(mStr.message, myStr.c_str());
    return 0;
}

И вы также записываете конец своего массива, как уже указывал Кедар.

Ответ 2

Почему это не работает, если mStr.message и hello имеют один и тот же тип данных?

Потому что стандарт говорит так. Массивы не могут быть назначены, только инициализированы.

Ответ 3

Объявление char hello[4096]; назначает пространство стека для 4096 символов, индексируется от 0 до 4095. Следовательно, hello[4096] недействителен.

Ответ 4

Вам нужно использовать memcpy для копирования массивов.