从函数返回数组与来自文件的数据

时间:2013-06-16 11:39:43

标签: c++

我有一个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;

2 个答案:

答案 0 :(得分: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成员函数。

答案 1 :(得分:0)

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

在使用数据后,您应该Student *students = new Student[length];使用getFromFiledelete [] students;使用main。但是像其他人所说的那样使用矢量是一个更好的主意。