使用fstream访问文件时无法读取内存

Unable to read memory when accessing file using fstream

本文关键字:读取 内存 fstream 访问 文件 使用      更新时间:2024-03-29

我知道以前有人问过这个问题,但从来没有人回答过,我的情况与不同

我正在创建一个学生结构来存储学生信息:

struct Student {
std::string m_firstname = "";
std::string m_lastname = "";
int m_testscore = {0};
char m_grade;
};

我想把学生的名字从一个文本文件中读取到一个数组中,我有一个函数:

// Read student data into an array
Student read_data() {
Student students[20];
// Open input file
std::ifstream input("name.txt", std::ios::in);
// Check if file is good
if (!input) {
std::cout << "Error occurred" << std::endl;
exit(-1);
}
// Read data from file
for (int i = 0; i < 20; i++) {
input >> students[i].m_firstname >> students[i].m_lastname;
}
// Display data
for (size_t i = 0; i < 20; i++) {
std::cout << students[i].m_firstname << " " << students[i].m_lastname << std::endl;
}

}

当我运行该程序时,一切都正常,我从控制台中显示的文件中获得所有学生信息,但随后我也会收到一个错误"无法读取内存";以及";访问违规">,我设置了一个断点,在遍历代码后,我发现在访问文件流时发生了错误,以下是调试器所说的

std::basic_ios<char,std::char_traits<char> >    <Unable to read memory> 

文本文件:

Guillermo Mora
Hugh Hanna
Isaac Atkinson
Teodoro Macdonald
Esperanza Sawyer
Werner Daugherty
Fran Middleton
Alvin Rowland
Richie Patterson
Mario Simpson
Lewis Wolf
Maria Yates
Ernest Cuevas
Andrea Bernard
Nigel Carlson
Dennis Owen
Ezra Jacobs
Sarah Francis
Jarvis Peterson
Erika Harmon

发生错误是因为我承诺返回一个从未用read_data((函数返回的类型。应该是:

void read_data() {
Student students[20];
// Open input file
std::ifstream input("name.txt", std::ios::in);
// Check if file is good
if (!input) {
std::cout << "Error occurred" << std::endl;
exit(-1);
}
// Read data from file
for (int i = 0; i < 20; i++) {
input >> students[i].m_firstname >> students[i].m_lastname;
}
// Display data
for (size_t i = 0; i < 20; i++) {
std::cout << students[i].m_firstname << " " << students[i].m_lastname << std::endl;
}
input.close();
}