2011-11-06 71 views
0

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

例如:

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); 
} 

我从文件中读取。该文件可能会改变,如果文件改变,我必须逐字节追加。

+2

目前还不清楚你想做什么?将2个地址添加在一起?或添加内容? –

+1

为什么不使用char *而不是void *? – nooga

+0

除非你知道它们有多大,否则看起来你没有。 (每个可以在0到3个字节之间,具体取决于) –

回答

2

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

您必须先分配的内存块,使用malloc()。然后,你的void指针会指向那个。该块将有一个确定的大小。第二块符合相同的概念,并具有确定的大小。

为了将第二个追加到第一个,应该为第一个块分配足够的额外空间以追加第二个块的内容。然后,您将使用memcpy()将第二个块的字节复制到第一个块。您将需要使用强制转换为字节指针来指定第一个块的偏移量。 ((unsigned char *)(ptr)+ ptr_alloced_bytes)将是第一个块到第一个复制数据结尾的偏移量,其中ptr_alloced_bytes是第一个操作读取的字节数。

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

+0

是的,我很抱歉,我有一个分配内存/重新分配功能。完全忘了把它放在...会更新帖子。同时,我会尝试使用memcpy。谢谢, – pauliwago

+0

我想弄清楚memcpy,但即使我分配了一个足够大的块以容纳两个块,我可以使用它来追加吗?或者将源码复制到目的地? – pauliwago

+0

欢迎您...但我会建议使用不同的方法。我假设你正在学习C.我可以在SAMS PUBLISHING的21天内推荐一本书C。一个好的在线教程是Coranado Enterprizes C教程。 –