如何分配类的char实例

Muh*_*aid 2 c++

class demoClass {
private:
    char item_name[50];

public:
    void set_item_name(char *item_name){ this->item_name=item_name; };
};
Run Code Online (Sandbox Code Playgroud)

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

Mys*_*ial 9

你不能分配这样的字符串.你有几个选择:

class demoClass{
private:
    char *item_name;

public:

    void set_item_name(char *item_name){
        this->item_name = item_name;
    };
};
Run Code Online (Sandbox Code Playgroud)

要么

class demoClass{
private:
    char item_name[50];


public:

    void set_item_name(char *item_name){
        strcpy(this->item_name,item_name);
    };
};
Run Code Online (Sandbox Code Playgroud)

要么

class demoClass{
private:
    string item_name;


public:

    void set_item_name(char *item_name){
        this->item_name = item_name;
    };
};
Run Code Online (Sandbox Code Playgroud)

请注意,如果你不小心,前两个有"陷阱".

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

在第二个中,如果你的字符串超过49个字符,你将超出数组.

第三种是首选的C++方式.

  • 使用`strncpy`而不是`strcpy` (2认同)
  • 关于'陷阱':只要使用#3,除非你知道你在做什么.如果您使用#2,请使用strncpy而不是strcpy,如下面的Seth Carnegie所建议的,以防止缓冲区溢出. (2认同)