0

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

    #include<iostream>
    using std::cin;
    using std::cout;
    using std::endl;
    void ChangeValue(char name[])
    {
    name = &quot;Jackson&quot;;//ERROR
}
int main()
{
    const int size = 10;
    char name[size];
    ChangeValue(name);
    return 0;
}

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

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

D1slav
  • 25
  • 9

1 Answers1

4

Массивы в Си/Си++ не передаются копированием в списке аргументов. Аргумент 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;
}
AlexGlebe
  • 17,227
  • Все понял,спасибо огромное за ответ,наверное все же лучше использовать std::array .Как думаете? – D1slav Jan 30 '21 at 11:50
  • P.S Извините мне мое любопытство,может вопрос не по теме,сколько вы изучали(-ете) "кресты".И много ли книг прочитали,и какую выделите как маст-хэв?Можете не отвечать если не хотите,я пойму.Может этот вопрос задать отдельно,но думаю опять минусовать будут. – D1slav Jan 30 '21 at 12:03
  • Чем проще типы, тем понятнее прога. Использование классов ведёт к абстрактности и теряется связь почему прога не пашет и так медленно. Всё на любителя. – AlexGlebe Jan 30 '21 at 12:03
  • @D1slav Книги и учебные ресурсы по С++. Общеизвестно, что C++ можно освоить за 21 день :) – wololo Jan 30 '21 at 12:07
  • @wololo Если так,то конечно получится выучить за 21 день)))А про материалы я уже читал этот вопрос,честно:не внушает доверия,но книги пересмотрю. – D1slav Jan 30 '21 at 12:18
  • @D1slav по книгам сложно сказать, у каждого своё мнение + зависит от начальной подготовки. Лично я бы обратил внимание на: 1) Липпман, Язык программирования C++, 2) Страуструп, Язык программирования C++, 3) Джосаттис, Стандартная библиотека C++. – wololo Jan 30 '21 at 12:33
  • @wololo Спасибо за посоветованные книги,только Страуструпа страшно))И,да вы правы у каждого на любую книгу своё мнение. – D1slav Jan 30 '21 at 12:41