class demoClass {
private:
char item_name[50];
public:
void set_item_name(char *item_name){ this->item_name=item_name; };
};
我收到错误: 将char无效分配给char [50]
答案 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);};