I have such piece of code:
typedef struct reader { char name[50]; char card_num[50]; char title[100]; }reader_t; int main() { vector<reader> vec; ifstream input_file("D:\\lab.txt", ios::binary); reader_t master[1]; input_file.read((char*)&master, sizeof(master)); for (size_t idx = 0; idx < 1; idx++) { reader temp; strcpy(temp.name, master[idx].name); strcpy(temp.card_num, master[idx].card_num); strcpy(temp.title, master[idx].title); vec.push_back(temp); cout << "Name: " << master[idx].name << endl; cout << "Card num: " << master[idx].card_num << endl; cout << "Title: " << master[idx].title<<endl; } cout << vec.size(); getchar(); } What is does: it reads structures from binary file into an array of structures,copies them into vector and displays structure.And yes, I do need to do like this - I need to store structures from file in vector and this is the only working way to do it I could find(if you can tell, how to read structures to vector directly from file - you are welcome).
So,everything works fine, but the problem is that I need to create a function which would be able to do the same, but with dynamic array.I wrote something like this:
void read_structs(int vec_size) { ifstream input_file("D:\\lab.txt", ios::binary); //Here I commented 2 ways how I tried to create a dynamic array of structs //reader* master = new reader[vec_size]; //reader* master = (reader*)malloc(sizeof(reader) * vec_size); input_file.read((char*)&master, sizeof(master)); for (size_t idx = 0; idx < vec_size; idx++) { reader temp; strcpy(temp.name, master[idx].name); strcpy(temp.card_num, master[idx].card_num); strcpy(temp.title, master[idx].title); vec.push_back(temp); cout << "Name: " << master[idx].name << endl; cout << "Card num: " << master[idx].card_num << endl; cout << "Title: " << master[idx].title<<endl; } } And that worked fine too unless I tried to run it.VS wasn't higlighting error in my code, it just was throwing an exception right as the moment when the program tried to access master[0].name.
vec_size?std::vectorstd::vectorfor a certain purpose. That's the easiest limitation to overcome, read the documentation.struct reader {...};is enough in C++,typedefversion isClegacy. You even mess withreaderandreader_tnames in your example