C++ memcpy/strcpy 的 char 指针到类成员 char 指针

问题描述

我有一个自定义类,我们称之为“Student”和一个主要方法。我正在实例化类,只想输出类的内容

我的程序崩溃了:Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

实际代码

学生.h

#ifndef PROG2_STUDENT_H
#define PROG2_STUDENT_H

#include <iostream>

class Student
{
private:
    char *name;

    char *firstName;

    unsigned matriculationNumber;

    unsigned semester;

public:
    Student(char *name,char *firstName,unsigned matriculationNumber,unsigned semester);

    ~Student();

    friend std::ostream &operator<<(std::ostream &ostream,const Student &student);
private:
};

#endif

学生.cpp

#include <cstring>
#include "Student.h"

Student::Student(char *name,unsigned semester)
{
    std::strcpy(this->name,name);
    std::strcpy(this->firstName,firstName);

    this->matriculationNumber = matriculationNumber;
    this->semester            = semester;
}

Student::~Student()
{
    delete[] this->name;
    delete[] this->firstName;
}

std::ostream &operator<<(std::ostream &stream,const Student &input)
{
    stream << input.name << "," << input.firstName << ": "
           << input.semester << " Semester,MA " << input.matriculationNumber;

    return stream;
}

和我的主要

#include <iostream>
#include "StudentPackage/Collection/StudentCollection.h"

int main()
{
    Student studentOne((char *)"Testerson",(char *)"Test",12345,2);
    std::cout << studentOne << std::endl;

    return 0;
}

我尝试了什么

我尝试了几种方法包括 memcpy。但是使用 memcpy 我无法正确检测字符数组的大小。

当我将学生构造函数更改为以下内容时,析构函数中的删除/释放出现问题。我想,无论如何这都不是正确的方法,但这种情况正在发生,因为在调用类析构函数之前输入变量的作用域已被销毁,对吗?

Student::Student(char *name,unsigned semester)
{
    this->name      = name;
    this->firstName = firstName;

    this->matriculationNumber = matriculationNumber;
    this->semester            = semester;
}

问题

  1. 如何正确地从构造函数名称到 this->name)复制字符数组?
  2. 如何从构造函数中正确复制字符数组(firstName 到 this->firstName)?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)