我正在编写一个从用户那里获取输入的小程序。输入是整数,对于学生的数量,2个双数作为等级,以及学习领域,其必须是最大大小为20的字符数组。 现在编写类时,我不太确定如何在构造函数中为字符数组赋予默认值。
这是我用类和构造函数编写的。
class nemandi
{
public:
nemandi(int num, double g1, double g2, char field[]);
void birta();
friend bool operator <(nemandi& nem1, nemandi& nem2);
private:
int studentNumber;
double grade1;
double grade2;
double medaltal();
char fieldOfStudy[20];
};
nemandi::nemandi(int num, double g1, double g2, char field[])
{
studentNumber = num;
grade1 = g1;
grade2 = g2;
fieldOfStudy[20] = field[20];
}
这不起作用,我无法在网上找到解决方案。任何人都可以指出我如何在构造函数中为char数组赋一个默认值吗?
提前致谢!
编辑:用fieldOfStudy[20] = field[20];
替换memcpy(fieldOfStudy, field, sizeof(fieldOfStudy));
就可以了!谢谢你们帮帮忙:)
答案 0 :(得分:1)
fieldOfStudy[20] = field[20];
您只是将第20位的字符从字段分配到fieldOfStudy。请改用memcpy:
memcpy(fieldOfStudy, field, sizeof(fieldOfStudy));
答案 1 :(得分:0)
此行fieldOfStudy[20] = field[20];
将char
中位置20的fieldOfStudy
设置为char
中位置20的field
的值。
请记住,fieldOfStudy
是一个指向char的指针,而char fieldOfStudy[20]
只是告诉编译器在char
之后会有19个fieldOfStudy
s {}指着。
答案 2 :(得分:0)
字符数组无法按照您想要的方式使用赋值和比较运算符,这就是创建std :: string类的原因。
nemandi::nemandi(int num, double eink1, double eink2, const std::string& lina)
{
studentNumber = num;
einkun1 = eink1;
einkun2 = eink2;
namslina = lina;
}
或
nemandi::nemandi(int num, double eink1, double eink2, const std::string& lina)
: studentNumber(num)
, einkun1 (eink1)
, einkun2 (eink2)
, namslina (lina)
{
}
如果您的案例需要数组,那么您必须使用memcpy之类的东西来复制数据
nemandi::nemandi(int num, double eink1, double eink2, char lina[])
: studentNumber(num)
, einkun1 (eink1)
, einkun2 (eink2)
{
memcpy(namslina, lina, sizeof(namslina));
}
如果您总是希望复制20个字符,那么哪个有效,您可以确保该参数至少是那么长。如果您正在使用C样式的空终止字符串,则可以使用“strcpy”。
答案 3 :(得分:0)
如果您需要在类构造函数中按默认值初始化 c-string ,则可以执行以下操作:
class A {
char str[20];
public:
A() {
// `def_str` will be created only once upon
// construction of first `A` instance
static char const def_str[] = "default string";
strcpy(str, def_str);
}