Я бы посоветовал вам держаться подальше от memcpy, так как это может привести к перекрытию памяти, как указано ниже.
Ссылка http://www.cplusplus.com/reference/cstring/memcpy/
void * memcpy ( void * destination, const void * source, size_t num );
Copy block of memory
The function does not check for any terminating null character in source -
it always copies exactly num bytes.
To avoid overflows, the size of the arrays pointed to by both the
destination and source parameters, shall be at least num bytes,
and should not overlap (for overlapping memory blocks, memmove is a safer approach).
Вы можете используйте другой подход, поскольку библиотека C, в частности, имеет функции для подобных требований, как показано ниже.
Полагаю, это то, чего вы хотите достичь.
int main(){
long double var1 = 123.23;
char str1[12];
memset(str1, 0x00, sizeof(str1));
sprintf(str1, "%-12.12Lf", var1);
printf(" Value : %-12.12s\n", str1);
long double var2 = 0;
sscanf(str1, "%12Lf", &var2);
printf(" Value : %Lf\n", var2);
return 0;
}
ПРИМЕЧАНИЕ. Здесь Вы также можете настроить точность.