Junior — Middle
Wat is het verschil tussen de functies memcpy en memmove in de programmeertaal C, en in welke situaties is het beter om ze te gebruiken?
sobes.tech AI
Antwoord van AI
В языке C функции memcpy и memmove используются для копирования блоков памяти, но между ними есть важное отличие:
-
memcpyкопирует память из источника в назначение, но не гарантирует корректную работу при перекрывающихся областях памяти. Использоватьmemcpyбезопасно только если области не пересекаются. -
memmoveтакже копирует память, но корректно обрабатывает случаи, когда исходная и целевая области перекрываются. Это достигается за счёт временного буфера или копирования в правильном направлении.
Когда использовать:
- Если вы уверены, что области памяти не пересекаются — используйте
memcpy(обычно быстрее). - Если есть вероятность перекрытия — используйте
memmove.
Пример:
char buffer[10] = "123456789";
// Перекрывающиеся области
memmove(buffer + 2, buffer, 5); // безопасно
// memcpy(buffer + 2, buffer, 5); // может привести к ошибкам