Estou escrevendo um pedaço de prática simples para comparar o uso de entre memcpy ou strncpy. Vejo que posso fazer essa cópia de string usando qualquer uma dessas duas funções:
char * strncpy ( char * destination, const char * source, size_t num );
e
void * memcpy ( void * destination, const void * source, size_t num );
Prática simples
char src[] = "Hello World";
char dst[20];
strncpy(dst, src, 5);
printf("%zu-", strlen(dst));
memcpy(dst, src, sizeof(dst));
printf("%zu-", strlen(dst));
strncpy(dst, src, 5);
printf("%zu", strlen(dst));
A saída real
5-11-11
Como posso entender que eles se comportam de forma diferente com respeito?
Em geral, como posso descobrir bytes relativos de blocos de memória diferentes copiados usando memcpy ou strncpy?