Страницы

Поиск по вопросам

суббота, 8 февраля 2020 г.

Как заполнить по умолчанию динамический массив?

#массивы #c


Приветствую господа! Есть некая структура Film и 2 массива: test и VideoArr (статичный
и динамичный). Заполнить по умолчанию test можно без проблем. А вот как заполнить по
умолчанию динамический массив VideoArr?
Пробовал такой вариант:
//VideoArr[0].genre="test"; 
//VideoArr[0].rating=7.3;
//VideoArr[0].price=58.5;

Числовые значения записываются нормально, а вот если в жанр записывать "test" компилятор
ругается.
От сюда вопрос, как будет наиболее правильно заполнить динамический массив строками
по умолчанию?
 #include 
    using 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 или её модификации

Комментариев нет:

Отправить комментарий