Это
string Cwords[] = { "Oak", "Tree", "Dog",
- это массив, а
oa << Cwords;
вы сериализовали массив.
Это
string Cwords;
является одним экземпляром string
. ia >> Cwords;
вы десериализовали один строковый объект, а не массив.
В cout << Cwords[i] << endl;
вы звоните string::operator[]
, и вы печатаете отдельный символ строки вместо печати целых экземпляров строки.
При десериализации вы должны создать массив и убедиться, что его размер достаточен для хранения данных:
string Cwords[10];
ia >> Cwords;
cout << Cwords[i] << endl; // now, this accesses instance of string from array
если вы хотите, чтобы ваш код был более гибким, возможно, вам следует использовать вектор строки?
#include <boost/serialization/vector.hpp>
...
vector<string> Cwords = { "Oak", "Tree", "Dog", "Cat", "Human", "Food", "Computer", "Inteligent", "Special", "Unique" };
oa << Cwords;
...
vector<string> Cwords;
ia >> Cwords;
if (i < Cwords.size())
cout << Cwords[i] << endl;