我有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 是一个数组,其中包含id,标题,摘要,作者数量以及名字和姓氏
以上代码适用于标题
但是当我尝试使用以下代码更改作者的姓名和姓氏时
//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错误并关闭...
答案 0 :(得分:3)
只需使用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";
答案 1 :(得分: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