Почему передача параметров функции в инициализацию структуры возвращает мусор или, по-видимому, ничего не делает? - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь создать функцию в c для создания и возврата новой структуры, похожей на конструктор в ООП. При проверке переменных строка является ненужной, а все числа равны 0. Разве структуры не могут быть инициализированы с использованием переменных в c?

Я искал в Интернете людей, которые пробуют аналогичную вещь, но все они используют литералы и строки для инициализации своих.

typedef struct tArtist{
    char realName[20];
    int accNum;
    double accBal;
    char telephoneNumber[15];
    double earningPerYear;
} Artist;




...

//function call
Artist artist = newArtist("Real Name", 123, 600.43, "1-(876)-362-2335", 999.99);

     Artist newArtist(char name[], int accountNum, double accountBal, char tele[], double earningPerYr) {
         Artist tempArtist = {name, accountNum, accountBal, tele, earningPerYr };


         return tempArtist;
     }

В качестве теста я ожидал, что realName будет "настоящим именем", но получил X {XRc

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Альтернативным способом достижения этой цели было бы использование указателей 'realName' и 'phoneNumber' в качестве символьных массивов, а затем выделение массивов в конструкторе с требуемыми размерами.

После этого используйте вызов strcpy () для перемещения строк.

0 голосов
/ 22 марта 2019

Когда вы используете name в качестве первого значения в инициализаторе Artist, вы пытаетесь сохранить указатель в массиве символов. Это неверный инициализатор.

Вам необходимо установить эти поля явно:

 Artist newArtist(char name[], int accountNum, double accountBal, 
                  char tele[], double earningPerYr) {
     Artist tempArtist = {"", accountNum, accountBal, "", earningPerYr };
     strcpy(tempArtist.realName, name);
     strcpy(tempArtist.telephoneNumber, tele);

     return tempArtist;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...