Использование memcpy(), когда перекрытие источника и адресата может привести к поведению undefined - в этих случаях может использоваться только memmove().
Но что, если я точно знаю, что буферы не перекрываются - есть ли причина использовать специально memcpy() или специально memmove()? Что я должен использовать и почему?