Реализовать аналог `void *memmove(void *to, void *from, size_t n)` - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день, подскажите пожалуйста, как реализовать такой метод самостоятельно? который копирует из одного массива в другой n элементов Спсибо, буду рада любому совету!

Решение задачи: «Реализовать аналог `void *memmove(void *to, void *from, size_t n)`»

textual
Листинг программы
void *mymemmove(void *to, const void *src, size_t n){
     //return memmove(to, src, n);
     // Replece the return statement above with your implementation of the function...
        char *dest= to;
        const char *source = src;
        int i;
 
        if(dest <= source){
                for(i=0; i<n; i++){
                        dest[i]=source[i];
                }
        }
 
        else{
                for(i=n; i>0; i--){
                        dest[i-1]=source[i-1];
                }
        }
 
        return dest;
 
}

Объяснение кода листинга программы

  1. Функция mymemmove принимает три аргумента: to, src и n.
  2. Аргумент to указывает на буфер, в который необходимо скопировать данные.
  3. Аргумент src указывает на буфер, из которого необходимо скопировать данные.
  4. Аргумент n указывает на количество байтов, которые необходимо скопировать.
  5. В функции используется переменная char *dest для хранения указателя на буфер, в который необходимо скопировать данные.
  6. В функции используется переменная const char *source для хранения указателя на буфер, из которого необходимо скопировать данные.
  7. В функции используется переменная int i для хранения индекса текущего байта.
  8. Функция проверяет, является ли буфер dest меньше или равен буферу source.
  9. Если буфер dest меньше или равен буферу source, то происходит копирование данных из буфера source в буфер dest с использованием цикла for.
  10. Если буфер dest больше буфера source, то происходит копирование данных из буфера source в буфер dest с использованием цикла for в обратном порядке.
  11. В конце функции возвращается указатель на буфер dest.
  12. Функция mymemmove предназначена для копирования данных из одного буфера в другой без изменения порядка байтов.
  13. Функция mymemmove может быть использована для копирования данных между буферами, которые пересекаются, но не содержат нулевые байты.
  14. Функция mymemmove не предназначена для копирования данных из буфера в null-указатель или в буфер, который содержит несовместимые данные.
  15. Функция mymemmove может быть использована для копирования данных между буферами, которые содержат данные разных типов (например, char и wchar_t).
  16. Функция mymemmove может быть использована для копирования данных между буферами, которые содержат данные разных размеров (например, char и short).
  17. Функция mymemmove может быть использована для копирования данных между буферами, которые содержат данные разных знаков (например, char и char signed).
  18. Функция mymemmove может быть использована для копирования данных между буферами, которые содержат данные разных типов и размеров (например, char и float).
  19. Функция mymemmove может быть использована для копирования данных между буферами, которые содержат данные разных знаков и размеров (например, char и long long).
  20. Функция mymemmove может быть использована для копирования данных между буферами, которые содержат данные разных типов и знаков (например, char и char signed и char unsigned).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.333 из 5
Похожие ответы