为什么我的字符串值存储我的结构中的所有字符数组?

Why my string value store all char arrays from my struct?

我正在读取包含以下数据的文件:

0001 Howard      Paredes Zegarra     Computacion    
0002 Penny       Vargas Cordero      Industrial     
0003 Sheldon     Cooper Quizpe       Mecatronica    

我的cpp文件是这样的:

struct Alumno {
    char    codigo[5];
    char    nombre[12];
    char    apellidos[20];
    char    carrera[15];
};


istream& operator >> (istream &stream, Alumno &record)
{   stream.read(record.codigo, 5);
    stream.read(record.nombre, 12);
    stream.read(record.apellidos, 20);
    stream.read(record.carrera, 15);
    stream.get();
    return (stream);
}



vector<Alumno> load() {
    ifstream file("datos.txt");
    vector<Alumno> students;

    while (!file.eof()) {
        Alumno student = Alumno();
        file >> student;
        students.push_back(student);
    }

    file.close();
    return (students);
}

int main() {
    auto students = load();

    for (auto student : students) {
        string nombre = student.nombre;
        cout << nombre << endl;
    }

    return (0);
}

所以问题是当打印变量 "nombre" 时打印整行减去第一列。 预期输出:

Howard
Penny
Sheldon

但是当前输出是:

Howard      Paredes Zegarra     Computacion    
Penny       Vargas Cordero      Industrial     
Sheldon     Cooper Quizpe       Mecatronica 

为什么我有这个输出,这是不是我的结构中的指针 char 有问题,任何建议都很好。提前致谢。 注意:我不能为这个任务使用字符串。

由于您使用的是 C 风格的字符串,因此您需要在数组中的 char 之后添加一个空终止符。这意味着您需要将每个 char 数组的大小增加一。不然你输出的时候,它会一直显示你告诉它打印的数组后面的所有数组的字符。

由于不允许使用 std::string,因此请在 C 风格字符串的末尾附加一个空终止符(数字 0 或字符 '[=14=]')。