2016-10-24 7 views
-1

Вот моя структура:C++ брошено: чтение нарушения прав доступа (FOPEN/Fread STRUCT)

struct Account { 
string accID; 
string name; 
float balance; 
string currency; 
int status; 
}; 

Функция:

Account layFileTaiKhoan(string id) { 
FILE * openfile; 
Account getAcc; 
string mypath = "Account\\" + id + ".dat"; 
openfile = fopen(mypath.c_str(), "r"); 

fread(&getAcc, sizeof TaiKhoan, 1, openfile); 

fclose(openfile); 

return getAcc; 
} 

Но я получил эту ошибку: «Исключение брошено: чтение нарушения прав доступа «при использовании моей функции, чтобы получить структуру, сохраненную в .dat-файле.

Пожалуйста, помогите решить эту проблему и большое спасибо за вашу помощь!

+2

Что такое TaiKhoan? – tkausl

+0

C и C++ - ** разные ** языки. Выберите тот, который вы компилируете, и соответствующим образом отредактируйте вопрос (включая теги)! – Olaf

+1

@PeteBecker: Я не знал, что C имеет тип 'string' и поддерживает оператор сложения в строковых литералах. – Olaf

ответ

4

Вы не можете freadstd::string (или объект, содержащий std::string), так как std::string объект содержит только указатели на реальную строку символов (для коротких строк с некоторых реализациях библиотеки, за исключением.) Чтение ранее составленное указатель не имеет смысла и с помощью указателя указано Undefined Behavior.