如何分配类的char实例

时间:2011-11-06 18:29:48

标签: c++

class demoClass {
private:
    char item_name[50];

public:
    void set_item_name(char *item_name){ this->item_name=item_name; };
};

我收到错误: 将char无效分配给char [50]

3 个答案:

答案 0 :(得分:9)

你不能分配这样的字符串。您有几种选择:

class demoClass{
private:
    char *item_name;

public:

    void set_item_name(char *item_name){
        this->item_name = item_name;
    };
};

class demoClass{
private:
    char item_name[50];


public:

    void set_item_name(char *item_name){
        strcpy(this->item_name,item_name);
    };
};

class demoClass{
private:
    string item_name;


public:

    void set_item_name(char *item_name){
        this->item_name = item_name;
    };
};

请注意,如果你不小心,前两个会有“陷阱”。

在第一个中,如果您传递的指针的生命在对象被销毁之前结束。你会得到一个悬垂的指针。

在第二个中,如果您的字符串长度超过49个字符,则会超出数组。

第三个是首选的C ++方式。

答案 1 :(得分:2)

您正在尝试分配指向数组的指针。您确实希望将char*指向的字符串复制到您的数组中:

void set_item_name(char *item_name){
    strncpy(this->item_name, item_name, 50);
    this->item_name[49] = 0; // because if the string is longer than 50, it won't be NULL terminated
};

如果您不想保留它的副本并且只想保留指向它的指针(并且您相信该内存不会被释放,则可以通过更改item_name来存储指针到char*并保留其他类似内容的原始代码。

答案 2 :(得分:1)

数组和指针不相同:

尝试:

void set_item_name(char item_name[]){strcpy(this->item_name,item_name);};
相关问题