C String concatenation using memcpy not appending

c, memcpy, string

Solution

You are repeatedly copying the null terminator at the end of test. `sizeof tbuf` is 5.

So all the C standard library functions will ignore all the other concatenants.

The solution: copy one less byte in the `memcpy`, and be sure to add a null terminator to the final string.

Problem

In some network code I need to encode packet structures in a buffer to send(2) over a socket but memcpy'ing the encoded buffers into a bigger buffer seems problematic. Here's a small code example illustrating what I am doing: ``` char tbuf[] = "test"; char *buf = malloc(300); memset(buf, '\0', 300); int bytes_to_copy = 300; int bytes_copied = 0; while (bytes_copied < bytes_to_copy) { memcpy(buf + bytes_copied, tbuf, sizeof(tbuf)); bytes_copied += sizeof(tbuf); } /* free, return */ ``` This should append "test" 60 times into buf but buf ends up only containing one "test". Am I using memcpy wrong?

Original source