Use memmove instead of memcpy for potentially overlapping memory

This fixes an issue reported by valgrind where overlapping memory
was copied with memcpy.
This also removes a redundant assignment where the array size was
explicitly set to zero when it was already zero.
Merge pull request #87 from fryshorts/fixes

Use memmove instead of memcpy for potentially overlapping memory