powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / передача массива char для инициализации свойства объекта
5 сообщений из 5, страница 1 из 1
передача массива char для инициализации свойства объекта
    #38042874
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем еще раз привет :)
Сейчас пытаюсь сделать следующее.
Есть структура:
Код: plaintext
1.
2.
3.
4.
struct videoShop
{
  char *movieName;
};


Я в функции main() получаю значение, которым нужно заполнить это свойство.
Код: plaintext
1.
2.
3.
4.
5.
6.
int main()
{
char *movieName = new char[100];
cin>>movieName;
return 0;
}


Инициализация объекта происходит в отдельной функции:
Код: plaintext
1.
2.
3.
4.
videoShop init(*movieName)
{
  videoShop object1;
}


И вот здесь я пробовал заполнять свойство [movieName] переданным в функцию значением.
Сначала пробовал так:
Код: plaintext
1.
2.
3.
4.
5.
videoShop init(*movieName)
{
  videoShop object1;
  object1.movieName = movieName;
}


Но здесь, я как понимаю, просто скопировались указатели, и как только массив из функции main(), на который указывает movieName, будет удален, в свойстве movieName останется мусор.
Сейчас делаю вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
videoShop init(*movieName)
{
  videoShop object1;
  char Buff = new char[100];
  object1.movieName = strcpy(Buff, movieName);
}


Но в таком случае, я не могу почему-то удалить указатель Buff - [delete Buff] - а память оставить. Или если под указатели память выделяется в стеке, то их удалять не надо? Программа их сама подчистит?
Заранее спасибо!
...
Рейтинг: 0 / 0
передача массива char для инициализации свойства объекта
    #38042914
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_G,

Сам указатель удалять не надо.
Надо удалять память куда он указывает.
Если выделенный через new массив возвращается за пределы функции то обычно удаляет его вызывающий код.

Ну а конкретно для ваших примеров я мало что могу сказать, т.к. они не являются валидными конструкциями языка.

Например, здесь я так понимаю имелось в виду выделенное:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
videoShop init(const char *movieName)
{
  videoShop object1;
  char* Buff = new char[100];  //здесь вместо 100 - лучше strlen(movieName) + 1
  object1.movieName = strcpy(Buff, movieName);
  return object1;
}


Ну так все правильно. Про аргумент вы не знаете что за массив - стат или дин, поэтому надо копировать в дин массив.
А ответственный за удаление выделенного массива - вызывающий код, который будет из него читать: закончит работу со структурой - удалит.

Но вообще обычно в С-стиле так не пишут.
Обычно в функцию передается указатель на структуру которую надо инициализировать.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
void init(videoShop* object1, const char *movieName)
{
  object1->movieName = new char[strlen(movieName) + 1];  
  strcpy(object1>movieName, movieName);
}
int main()
{
  videoShop object;
  init(&object, "sss");
}
...
Рейтинг: 0 / 0
передача массива char для инициализации свойства объекта
    #38043042
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky ,
Спасибо большое за подробнее объяснение! Теперь все ясно.
Код: plaintext
1.
videoShop init(const char *movieName)


Единственный вопрос, Вы объявляете const char , а не просто char , для того, что бы перестраховаться, что в функции init массив movieName не будет изменен?
...
Рейтинг: 0 / 0
передача массива char для инициализации свойства объекта
    #38043048
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_G,

Да.
...
Рейтинг: 0 / 0
передача массива char для инициализации свойства объекта
    #38043055
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv ,
спасибо! :)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / передача массива char для инициализации свойства объекта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]