在我的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
函数提供什么数据类型?
p.s。我是c / c ++的新手,但对指针,引用和特别是char
和char*
答案 0 :(得分:0)
对于构造函数,最好也传递一个length参数,因为您最多只能接受8个字节。 然后,如果您的长度是<= 8:
memcpy(data_, data, length)
参数化的get_data中有相同的内容,因此它将是:
memcpy(*data, data_, 8) /* Assuming that they provide long enough array. */
当处理数组时总是包含长度,当处理指针以检查它们是否为NULL时,这是一个好习惯-我将留给您。 出现错误的原因是因为无法将指针分配给静态声明的数组-它具有固定的地址,因此只能更改内容。