我有mainbuf[bufsize]
,最初为空。
我正在阅读一些输入:read(fd, otherbuf, sizeof(otherbuf))
分配给otherbuf
的不同字符串。每次我将新字符串分配给otherbuf
时,我都希望将其附加到mainbuf
。
我做:
memcpy(mainbuf,otherbuf, numberofBytesReadInotherbuff)
但它没有给我所有的字符串。通常最后otherbuf
是正确的,但所有其他的都缺少字符。
答案 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()
这样的变体,可以防止缓冲区溢出 - 如果使用正确的话。