如何赋值类的char实例
How to assign char instance of a class
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);};
相关文章:
- 从C++实例化QML
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 为char数组调整zlib-zpipe
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 使用strcpy将char数组的元素复制到另一个数组
- 在字符串函数中抛出'char const*'实例后调用的终止
- 在抛出"std::__cxx11::basic_string<char、std::char_traits<char>、std::分配器<char>>"的实例后调用终
- 引发"char const*"错误的实例后调用的终止
- 无法用const char *数组实例化模板
- char阵列使用新的实例化后显示垃圾
- 从字符* 高效实例化向量<char>
- 不能将 boost::stream 与 std::string<unsigned char> 一起使用来实例化 boost::binary_oarchive 或 boost::binary
- 如何在 C++ 中将类的实例与 char * 变量进行比较
- 为什么用const char*变量构造类的未分配临时实例是错误的,而该类具有const char*constructor
- 在抛出"char const*"实例后终止调用
- 如何在实例化时使用用户输入在类构造函数中初始化私有char *
- 如何用int替换char的实例,然后用它们访问数组
- 如何赋值类的char实例
- 最令人烦恼的解析实例与std::string和char*
- 使用静态char*数组成员的模板特化,在多个单元中实例化