2011-04-07 14 views
6

Tengo un mainbuf[bufsize], vacío al principio.¿Cómo usar memcpy?

Estoy leyendo de algunas entradas: read(fd, otherbuf, sizeof(otherbuf)) diferentes cadenas que están asignadas a otherbuf. Cada vez que asigno una nueva cadena al otherbuf, deseo adjuntarla al mainbuf.

yo:

memcpy(mainbuf,otherbuf, numberofBytesReadInotherbuff) pero no me da todas las cuerdas. Por lo general, el último otherbuf es correcto, pero a todos los demás les faltan caracteres.

Respuesta

18

Debe cambiar el puntero de destino cada vez que llame al memcpy.

Por ejemplo, supongamos que tiene 4 bytes en mainbuf ahora. Luego recibes 10 bytes. Aquí está cómo anexarlo:

memcpy(mainbuf + 4, otherbuf, 10); 
+2

Ver también: ['mempcpy'] (http://linux.die.net/man/3/mempcpy). – mgalgs

3

memcpy reemplaza la memoria, no se agrega. Si desea usar memcpy, su código deberá ser un poco más complejo.

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

Cuando pasa en mainbuf, está pasando la misma dirección de destino cada vez. Necesita incrementar la dirección de destino cada vez que usa memcpy para que lo coloque en la memoria posterior, en lugar de sobreescribir la misma cadena cada vez.

Pruebe utilizar strcat en su lugar, está diseñado para concatenar cadenas, lo que suena como lo que quiere hacer. Asegúrese de verificar que tiene suficiente memoria antes de usarla, para que no tenga problemas de memoria.

1

La descripción del problema suena como el uso apropiado de strcat. Strcat debe manejarse con cuidado ya que puede escribir fácilmente más allá de los límites de un búfer. Por esa razón, aquí hay variaciones como strncat() que pueden evitar los desbordamientos del búfer, si se usan correctamente.