使用类 c++ 中的构造函数为 char 数组提供默认值
Giving a char array a default value with a constructor in a class c++
我正在编写一个小程序,它接受用户的输入。输入是一个整数,对于学生的数字,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 数组提供默认值的正确方向?
提前感谢!
编辑:用memcpy(fieldOfStudy, field, sizeof(fieldOfStudy));
替换fieldOfStudy[20] = field[20];
做到了!感谢您帮助伙计们:)
fieldOfStudy[20] = field[20];
您只需将位置 20 的字符从字段分配到研究字段。改用memcpy:
memcpy(fieldOfStudy, field, sizeof(fieldOfStudy));
此行fieldOfStudy[20] = field[20];
将char
fieldOfStudy
中位置 20 设置为field
中位置 20 的char
值。
请记住,fieldOfStudy
是指向 char 的指针,char fieldOfStudy[20]
只是告诉编译器,在 fieldOfStudy
指向的指针之后还会有 19 个char
。
字符数组不能按照你想要的方式使用赋值和比较运算符,这就是创建 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 样式的 null 终止字符串,则应使用"strcpy"。
如果需要在
类构造函数中按默认值初始化 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);
}