1

私は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エラーとして「プログラムが応答していません」と表示され、終了します...

4

2 に答える 2

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";
于 2013-05-20T17:38:03.053 に答える
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
于 2013-05-20T17:38:25.757 に答える