Реализовать аналог `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;
}
Объяснение кода листинга программы
- Функция
mymemmoveпринимает три аргумента:to,srcиn. - Аргумент
toуказывает на буфер, в который необходимо скопировать данные. - Аргумент
srcуказывает на буфер, из которого необходимо скопировать данные. - Аргумент
nуказывает на количество байтов, которые необходимо скопировать. - В функции используется переменная
char *destдля хранения указателя на буфер, в который необходимо скопировать данные. - В функции используется переменная
const char *sourceдля хранения указателя на буфер, из которого необходимо скопировать данные. - В функции используется переменная
int iдля хранения индекса текущего байта. - Функция проверяет, является ли буфер
destменьше или равен буферуsource. - Если буфер
destменьше или равен буферуsource, то происходит копирование данных из буфераsourceв буферdestс использованием циклаfor. - Если буфер
destбольше буфераsource, то происходит копирование данных из буфераsourceв буферdestс использованием циклаforв обратном порядке. - В конце функции возвращается указатель на буфер
dest. - Функция
mymemmoveпредназначена для копирования данных из одного буфера в другой без изменения порядка байтов. - Функция
mymemmoveможет быть использована для копирования данных между буферами, которые пересекаются, но не содержат нулевые байты. - Функция
mymemmoveне предназначена для копирования данных из буфера в null-указатель или в буфер, который содержит несовместимые данные. - Функция
mymemmoveможет быть использована для копирования данных между буферами, которые содержат данные разных типов (например,charиwchar_t). - Функция
mymemmoveможет быть использована для копирования данных между буферами, которые содержат данные разных размеров (например,charиshort). - Функция
mymemmoveможет быть использована для копирования данных между буферами, которые содержат данные разных знаков (например,charиchar signed). - Функция
mymemmoveможет быть использована для копирования данных между буферами, которые содержат данные разных типов и размеров (например,charиfloat). - Функция
mymemmoveможет быть использована для копирования данных между буферами, которые содержат данные разных знаков и размеров (например,charиlong long). - Функция
mymemmoveможет быть использована для копирования данных между буферами, которые содержат данные разных типов и знаков (например,charиchar signedиchar unsigned).