gpt4 book ai didi

c++ - 我的 C++ 程序中的 char 数组不会打印任何内容

转载 作者:行者123 更新时间:2023-11-30 05:03:28 25 4
gpt4 key购买 nike

我正在为我的类(class)编写我的第一个 C++ 程序。我对这个项目真的很陌生,所以我有很多东西要学。在我的程序中,我想创建一个包含 Undergrad/grad/gradassist 派生类的 Student 类。姓名和 SSN 字段必须在一个字符数组中(我知道字符串更有意义,但老师要求一个字符数组)。该程序大部分工作正常,只是它不在我的 char 数组中打印任何内容。请帮忙!

#include <iostream>;
using namespace std;
class Student {
protected:
char name[21];
char ssn[10];
float gpa;
int credits;

public:
Student::Student() {};

Student(const char n[], const char ss[], float& gp, int& cred) {
name[21] = n[21];
ssn[10] = ss[10];
gpa = gp;
credits = cred;


}

virtual void print() {
cout << "Name: " << name << endl;
cout << "SSN: " << ssn << endl;
cout << "GPA: " << gpa << endl;
cout << "Credits: " << credits << endl;
}
virtual float tuition() const = 0;


};
class undergrad : public Student {
protected:
float undergrad_rate;
char* year;
public:
undergrad::undergrad() {}

undergrad(float ugr, char* yr, const char n[], const char ss[], float&
gp, int& cred) :
Student(n, ss, gp, cred), undergrad_rate(ugr), year(yr){}

void set_year(char* yr) {
year = yr;
}
char* getYear() {
return year;
}
float getRate() {
return undergrad_rate;
}
void print() {
Student::print();
cout << "Undergrad rate: " << undergrad_rate << endl;
cout << "year: " << year << endl;


}

float tuition() {
//cout << "The tuition is $35000" << endl;
return 35000;
}

};
class grad : public Student {
protected:
float grad_rate;
char* thesis;

public:

};

int main(){

char* jr = "Junior";
char* sr1 = "Senior";
char* fr = "Freshman";
char* sr = "Sophmore";

undergrad g(380, jr, "M", "000111222", 4.0, 12);
g.print();


system("pause");
return 0;

}

最佳答案

问题出在初始化成员 namessn 的方式上:

 Student(const char n[], const char ss[], float& gp, int& cred) {
name[21] = n[21];
ssn[10] = ss[10];

这里有不止一件事不对

  1. namessn 分别是大小为 21 和 10 的字符数组。这意味着有效索引的范围分别为 0 到 20 和 0 到 9。因此,通过访问 name[21]ssn[10],您正在访问超出分配内存末尾的元素。
  2. 即使索引有效,您也只能通过这种方式分配一个字符。

为了按照您想要的方式初始化这些成员变量,请执行以下操作:

 Student(const char n[], const char ss[], float& gp, int& cred) {
strcpy_s(name, sizeof(name), n);
strcpy_s(ssn, sizeof(ssn), ss);

这会将包含输入字符串的所有字符复制到您的成员变量中,您将获得所需的输出。

关于c++ - 我的 C++ 程序中的 char 数组不会打印任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49411720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com