使用类c ++中的构造函数为char数组赋予默认值

时间:2014-11-12 14:13:50

标签: c++ arrays class constructor char

我正在编写一个从用户那里获取输入的小程序。输入是整数,对于学生的数量,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));就可以了!谢谢你们帮帮忙:)

4 个答案:

答案 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);

  }