C++ 更改作为参数给定的数组的值

C++ 更改作为参数给定的数组的值,c++,arrays,pointers,C++,Arrays,Pointers,我尝试在函数中将结构更改为字节数组。我想给这个函数一个char指针作为参数,并想更改这个指针的值以指向新数组。这在函数中起作用,但在指针指向随机数的外部 我的函数是这样的: void getNewMessage(char *bit_struct, size_t *msglen) { Pos struct_data = {0, 0, 1.0, 2.0, 3.0, 0.1, 0.2, 0.3, 100.0}; *msglen = sizeof(struct_data); ch

我尝试在函数中将结构更改为字节数组。我想给这个函数一个char指针作为参数,并想更改这个指针的值以指向新数组。这在函数中起作用,但在指针指向随机数的外部

我的函数是这样的:

void getNewMessage(char *bit_struct, size_t *msglen) {
    Pos struct_data = {0, 0, 1.0, 2.0, 3.0, 0.1, 0.2, 0.3, 100.0};
    *msglen = sizeof(struct_data);
    char b[*msglen];
    memcpy(b, &bit_struct, *msglen);
    bit_struct = b;

    // Recreate the struct to check
    Pos tmp;
    memcpy(&tmp, bit_struct, sizeof(tmp));
    std::cout << "struct in function is: " << tmp.posX << std::endl;
}
void getNewMessage(字符*位结构,大小*msglen){
Pos struct_data={0,0,1.0,2.0,3.0,0.1,0.2,0.3,100.0};
*msglen=sizeof(结构数据);
字符b[*msglen];
memcpy(b和bit_struct,*msglen);
位结构=b;
//重新创建要检查的结构
Pos-tmp;
memcpy(&tmp,bit_struct,sizeof(tmp));

std::cout
bit\u struct=b;
不起作用。将
getNewMessage(char*bit\u struct,size\t*msglen)
更改为
getNewMessage(char*&bit\u struct,size\t*msglen)

这将创建一个本地数组,这意味着一旦您离开函数,它将超出作用域。它的内容将被取消定义

你想做的是

char* b = (char*) malloc(*msglen);
在C中,或

char* b = new char[*msglen];
< C++ >

在分配b之前,不要忘记释放或删除[]位结构,因为它会导致内存泄漏

作为旁注

char b[*msglen];

可变长度数组在C++中是不合法的。

看起来像C,但它不是。为什么不使用容器而不是原始数组?我想稍后通过UDP连接发送BytErRaye,这样容器只会增加我必须发送的数据的大小。所以我用一个简单的字节数组。<代码> MycPy(b,and BITSyrt,*MSGLEN)
不会像你想象的那样做。你的意思是写
memcpy(b,bit_struct,*msglen);
?“因此,容器只会增加我必须发送的数据的大小”不。它会让你的代码“更好”(更容易阅读,更不容易出错)当要发送数据时,你不必发送容器,只需发送原始数组。你总是可以从向量中获取原始数组,反之亦然,因此没有理由到处处理原始数组,因为你需要在一个地方使用原始数组。我完全忘了这一点。谢谢你!我已经有一段时间没有使用指针了“malloc/new”解决了部分问题
char b[*msglen];