在c++中处理void指针和char

deal with void pointers and char in c++

本文关键字:指针 char void 处理 c++      更新时间:2023-10-16

我现在正在编写一段代码,遇到了void指针和char的问题。基本上,在serialize函数中,我们会有一个新的char。我们需要将该字符存储在CCD_ 1中。这是serialize函数的签名。

void serialize(void *buffer,
               //some other inputs here 
              ){
std::string str = "";
/*some code here, store the final output in str first*/
char* charStr = new char[str.size()];
strcpy(charStr,str.c_str());
buffer = static_cast<void*>(charStr);
}

使用这样的功能,

char buffer[256];
serialize(buffer, 
          //some other inputs here 
);

然而,存储在buffer中的数据会非常奇怪。作为临时解决方案,我将签名中的void指针更改为char指针。然而,我知道一定有更好的。

如果要填充缓冲区,则不能为其赋值(这只会覆盖指针,使原始缓冲区内容保持不变)。在serialize(charStr)中也不需要临时缓冲区。您可以直接将strcpy写入输出缓冲区,如下所示:

void serialize(void *buffer
              ){
  std::string str = "foo bar baz";
  strcpy((char *)buffer, str.c_str());
}

将其定义为

   void serialize(void *& buffer,
                   //some other inputs here 
                  ){

使用指针作为参数,记住删除缓冲区

char* buffer;
serialize(buffer, 
          //some other inputs here 
);