c ++初始化类的char数组成员
Posted
技术标签:
【中文标题】c ++初始化类的char数组成员【英文标题】:c++ initializing char array member of class 【发布时间】:2018-11-09 14:32:13 【问题描述】:在我的 c++ 项目中,我有两个成员的班级。我遇到问题的 char 数组成员。
class frame_message
public:
explicit frame_message(const unsigned int id, const char data[]) :id_(id), data_ *data ;
// only the first char 'a' is copied to `data_`
char* get_data() return data_; ;
void get_data(char** data) *data = data_; ;
private:
unsigned int id_; char data_[8];
;
现在我想从 main 方法发送另一个用于初始化类数组的 char 数组。
main
char data[8]='a','b','c' // indexs 3 to 7 are '\0'
char data2[8];
char data3[8];
frame_message myMessage(0xF004,data); // the data is passed as "abc"
data2 = myMessage.get_data(); // analysis error
myMessage.get_data(&data3); // runtime exception
我应该如何使用发送给构造函数的数据数组来初始化类的私有成员?
对于get_data
函数也应该传递什么数据类型?
附言我是 c/c++ 新手,但对指针、引用尤其是 char
和 char*
感到困惑
【问题讨论】:
main
缺少参数列表和返回类型。似乎没有任何理由在这里使用固定大小的 C 样式数组。只需使用std::string
,您就不会遇到任何问题。
你有两个方法叫做 get_data 看起来第二个应该叫做 set_data ?
请记住,在您的情况下 *data = 'a' 当您可能需要数组的副本时。有两种方法可以做到这一点,你可以只给它数据的地址 - 即在你的构造函数中丢失 * 或者如果你想也将数据保留在 main 中以供以后使用,则执行 memcpy 或类似的操作。如果你只是给它地址,那么在一个地方修改它也会修改另一个地方。编辑:我刚刚注意到你使用了静态数组,所以仅仅分配地址是行不通的——你需要复制
【参考方案1】:
对于构造函数,最好也传递一个长度参数,因为您最多只能接受 8 个字节。 那么,如果你的长度是
memcpy(data_, data, length)
在您的参数化 get_data 中也是如此,所以它会是:
memcpy(*data, data_, 8) /* Assuming that they provide long enough array. */
在处理数组时始终包含长度以及在处理指针时检查它们是否为 NULL 是一种很好的做法 - 我将把这个留给你。 您收到错误的原因是您无法将指针分配给静态声明的数组 - 它具有固定地址,您只能更改内容。
【讨论】:
以上是关于c ++初始化类的char数组成员的主要内容,如果未能解决你的问题,请参考以下文章