#массивы #c
Приветствую господа! Есть некая структура Film и 2 массива: test и VideoArr (статичный и динамичный). Заполнить по умолчанию test можно без проблем. А вот как заполнить по умолчанию динамический массив VideoArr? Пробовал такой вариант: //VideoArr[0].genre="test"; //VideoArr[0].rating=7.3; //VideoArr[0].price=58.5; Числовые значения записываются нормально, а вот если в жанр записывать "test" компилятор ругается. От сюда вопрос, как будет наиболее правильно заполнить динамический массив строками по умолчанию? #includeusing namespace std; struct Film { char name[50]; char producer[50]; char genre[30]; float rating; float price; }; int size=10; Film test[10]={{"mars", "petia", "fantastika" ,11.5,5},{"terminator", "cameron", "fantastika" ,10.1,5}}; Film *VideoArr= new Film[size]; ...
Ответы
Ответ 1
Вы используете статический инициализатор. В вашем случае (Си-стиль) можно обращаться непосредственно к полям. Возможно, есть смысл написать отдельную функцию CreateFilm(): const int size=10; Film **ptrTest = new *ptrTest[size]; for (int i=0; iname,"mars"); strcpy((*outPtr)->producer,"petia"); strcpy((*outPtr)->genre,"fantastika"); (*outPtr)->rating = 11.5; (*outPtr)->price = 5; } void ReleaseFilm(Film **outPtr) { delete (*outPtr); (*outPtr) = nullptr; } В случае с С++ стоило бы воспользоваться конструктором по умолчанию. Ответ 2
Вы путаете инициализацию с присваиванием. Нельзя напрямую присвоить в char[] строку через двойные кавычки вот почему: char test[]="LOL"; //<- инициализация test = "NEW LOL";//нельзя присваивать строковый литерал указателю, так как test - указатель на первый символ, а сама строка - массив символов. В Вашем случае: Film test[10]={{...}}//инициализация, где с фигурных скобок идек блок инициализаторов, потому прекрасно работает Чтобы присвоить char * строку в двойных кавычках (строковый литерал) используйте функцию из string.h - strcpy или её модификации
Комментариев нет:
Отправить комментарий