如何正确使用memcpy?

时间:2011-04-07 20:20:52

标签: c

我有mainbuf[bufsize],最初为空。

我正在阅读一些输入:read(fd, otherbuf, sizeof(otherbuf))分配给otherbuf的不同字符串。每次我将新字符串分配给otherbuf时,我都希望将其附加到mainbuf

我做:

memcpy(mainbuf,otherbuf, numberofBytesReadInotherbuff)但它没有给我所有的字符串。通常最后otherbuf是正确的,但所有其他的都缺少字符。

3 个答案:

答案 0 :(得分:19)

每次拨打memcpy时都需要更改目标指针。

例如,假设您现在在mainbuf中有4个字节。接下来你会收到10个字节。以下是如何追加它:

memcpy(mainbuf + 4, otherbuf, 10);

答案 1 :(得分:3)

memcpy替换内存,它不会追加。如果你想使用memcpy,你的代码需要更复杂。

void * memcpy(void * destination,const void * source,size_t num);

当您传入mainbuf时,每次都传递相同的目标地址。每次使用memcpy时都需要递增目标地址,以便将其放在后续内存中,而不是每次都覆盖相同的字符串。

尝试使用strcat,它旨在将字符串连接在一起,这听起来像你想要做的。确保在使用之前检查是否有足够的内存,因此不会遇到内存问题。

答案 2 :(得分:1)

问题的描述听起来像是strcat的恰当使用。必须小心处理Strcat,因为它可以轻松地写入超出缓冲区的范围。出于这个原因,这里有像strncat()这样的变体,可以防止缓冲区溢出 - 如果使用正确的话。