Скопируйте символ в структурный указатель

У меня есть 2 структуры и тип переменной Book

Book book_struct[100];

typedef struct Book{
int id;
char title[256];
char summary[2048];
int numberOfAuthors;
Author * authors;
};

typedef struct Author{
char firstName[56];
char lastName[56];
};

когда я хочу изменить название каждой книги, которую я делаю

        //title
char *title_char=new char[parsedString[1].size()+1];
title_char[parsedString[1].size()]=0;
memcpy(title_char,parsedString[1].c_str(),parsedString[1].size());

strcpy(books_struct[z].title, title_char);

где parsedString это массив, который содержит идентификатор, заголовок, резюме, количество авторов, а также имя и фамилию

и приведенный выше код работает для заголовка

но когда я пытаюсь изменить имя автора и фамилию, используя следующий код

        //author firstname
char *author_fn_char=new char[parsedString[4].size()+1];
author_fn_char[parsedString[4].size()]=0;
memcpy(author_fn_char,parsedString[4].c_str(),parsedString[4].size());

strcpy(books_struct[z].authors->firstName, author_fn_char);

программа компилируется, и когда я запускаю ее, она говорит «Программа не отвечает» как ошибка Windows и закрывается …

1

Решение

Ваша авторская переменная, скорее всего, не выделена. указатели могут указывать только на другие объекты и должны быть правильно распределены для назначения переменных (например, author = new Author).

Author *au;
au->firstname = "hello" //au is a pointer and cannot hold values, error
au = new Author;
au->firstname = "hello" //valid
1

Другие решения

Просто используйте std::strings (а также std::vector<Author> вместо Authors*):

#include <string>
#include <vector>

struct Book{
int id;
std::string title;
std::string summary;
std::vector<Author> authors; // authors.size() will give you number of authors
};

struct Author{
std::string firstName;
std::string lastName;
};

Book b;
b.title = "The C++ programming Language";
3

По вопросам рекламы [email protected]