如何赋值类的char实例

How to assign char instance of a class

本文关键字:char 实例 赋值 何赋值      更新时间:2023-10-16
class demoClass {
private:
    char item_name[50];
public:
    void set_item_name(char *item_name){ this->item_name=item_name; };
};

我收到错误: char对char[50]赋值无效

你不能这样赋值字符串。您有几个选项:

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++方式

您正在尝试将指针分配给数组。你真的想复制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*来存储指针,并将其他所有内容保持在原始代码中

数组和指针不一样:

试题:

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