c - 附加两个 void* 指针

标签 c pointers void

有没有办法追加 2 个 void* ptr?每个都是一个字符数组:

例如:

void * ptr;
ptr = malloc(3);
read(0, ptr, 3);

void * rtr;
rtr = malloc(3);
read (0, rtr, 3);

/*how to add ptr and rtr??*/

谢谢!

*编辑:是的,我想将内容添加在一起。 实际上,这更多的是我的代码的工作方式:

void *ptr;
ptr = malloc(3);
read(0, ptr, 3);

void *rtr;
rtr = malloc(1);
int reader;
reader=read(0, rtr, 1);
int i=1;
while(reader!=0){
  /* append contents of rtr to ptr somehow?? */
  i++;
  rtr = realloc(rtr, i);
  reader=read(0, rtr, 1);
}

我正在读取文件。而且文件可能会发生变化,如果文件发生变化,我必须逐字节附加。

最佳答案

按照你的措辞方式,你的问题并没有真正的答案,但我会尝试......

您必须首先使用 malloc() 分配一 block 内存。然后,你的 void 指针将指向它。该 block 将具有确定的大小。第二 block 符契约(Contract)样的概念,并且有一定的大小。

为了将第二个 block 附加到第一个 block ,应该为第一个 block 分配足够的额外空间来附加第二个 block 的内容。然后,您可以使用 memcpy() 将字节从第二个 block 复制到第一个 block 。您需要使用字节指针的转换来指定第一个 block 的偏移量。

((unsigned char *)(ptr) + ptr_alloced_bytes) 是第一个 block 到第一个复制数据末尾的偏移量,其中 ptr_alloced_bytes 是第一个操作读取的字节数。

否则,您需要分配一个足够大的新 block 来容纳这两个 block ,然后使用 memcpy() 复制它们。

关于c - 附加两个 void* 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8031340/

相关文章:

c 语言 - 当我设置程序与主管一起自动运行时,system() 函数不起作用

c - 如何在单个窗口中显示gtk中的文本和按钮?

c++ - 我可以调用 memcpy() 和 memmove() 并将 "number of bytes"设置为零吗?

c++ - void指针的内容怎么写?

c - 链表节点错误节点的无限循环并在节点之间插入

c - C 预处理器的对面 "stringification"

c++ - 何时删除返回值的已分配内存

c++ - 如何在数组中存储地址 - C++?

c++ - 如何将对象*作为 void*& 传递?

c - int main() 和 int main(void) 之间的区别?