Значение типа"const *char" нельзя присвоить сущности типа"*char"

Нужно объяснение почему вот так делать нельзя???

    #include<iostream>
    using std::cin;
    using std::cout;
    using std::endl;
    void ChangeValue(char name[])
    {

        name = "Jackson";//ERROR
    }
    int main()
    {
        const int size = 10;
        char name[size];
        ChangeValue(name);
        return 0;
    }

Я знаю что ="Jackson"-это константый строковый литерал.

ВОПРОС:"Как можно в функции изменить значение массива char-ов name[]"

Подскажите как можно реализовать?.P.S Не минусуйте ответ,у меня и так низкий рейтинг((


Ответы (1 шт):

Автор решения: AlexGlebe

Массивы в Си/Си++ не передаются копированием в списке аргументов. Аргумент char name[] рассматривается как указатель на первый элемент массива char * name.

Строка в программе "Jackson" это массив константных букв, а когда вы указателю присваиваете массив, то массив букв автоматически преобразовывается в указатель на первую букву. И ошибка происходит из-за попытки присваивать указатель указателю другого типа.

Чтобы копировать массивы функций нет, для каждого типа всё индивидуально. Копировать строки можно с помощью strcpy или strncpy.

#include<iostream>
#include <cstring>
using std::cin;
using std::cout;
using std::endl;
void ChangeValue(int size,char name[])
{
  strncpy(name,"Jackson",size);
}
int main()
{
    const int size = 10;
    char name[size];
    ChangeValue(size,name);
    std::cout<<"name = '"<<name<<'\''<<std::endl;
    return 0;
}
→ Ссылка