0

我有一个 C++ 程序,我用它在文件中插入信息。我有第二个(这个)程序来获取数据。我的目标是获取所有数据并将其作为 Student 类型的数组返回。在 GetFromFile 方法中,我正在获取信息并且可以打印它,但是我如何返回它并在主函数中像这样使用它:

int size;
Student *students = getFromFile( "D:\\test.txt", size );
cout << students[0].name;

我得到的错误是

[Warning] address of local variable `students' returned 

这是我的代码:

struct Student 
{
   string name;
   char egn[11];
   short grade;
   double avg_grades;
   int excused, unexcused;    
};

Student* getFromFile(string filename, int &length)
{
 fstream file;

 file.open(filename.c_str(), ios::in);

 file >> length;

 Student students[length];

 for ( int i = 0; i < length; i++ )
 {
    file >> students[i].name >> students[i].egn >> students[i].grade >> students[i].avg_grades >> students[i].excused >> students[i].unexcused;
 }

file.close();

return students;
}

int main()
{
int size;
Student *students = getFromFile( "D:\\test.txt", size );

cout << students[0].name;
4

2 回答 2

2

首先,这个:

file >> length;
Student students[length];

是非标准扩展。数组的长度应该在编译时知道。

其次,您将返回指向一旦数组超出范围将被释放的内存的指针。您应该std::vector改用:

#include <vector>

// ...

std::vector<Student> getFromFile(string filename)
{
    // ...
    std::vector<Student> students(length);

此外,您不再需要length通过引用传递,因为std::vector具有size成员函数。

于 2013-06-16T11:43:51.910 回答
0

getFromFile您返回一个指向仅存在于该函数中的向量的指针。然后,main您有一个指向某些无效数据的指针。

您应该在使用数据后使用Student *students = new Student[length];ingetFromFiledelete [] students;in 。main但是,正如其他人所说,为此使用向量是一个更好的主意。

于 2013-06-16T11:45:22.003 回答