URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5551
[ Назад ]

Исходное сообщение
"memmove"

Отправлено masker , 05-Июл-06 16:35 
Как бы вы реализовали функцию memmove(в самом простом варинте без проверок)

int i,size=5;
char *src="ABCDE";
char *dst;

for(i=0;i<size;i++) {
dst[i]=src[i];
}

for(i=0;i<5;i++) {
printf("[%d]%c   %c\n",i,src[i],dst[i]);
}

Выводит
./mem2
[0]A   A
[1]B   B
[2]C   C
[3]D   D
[4]E   E
Укажите на ошибки плз


Содержание

Сообщения в этом обсуждении
"memmove"
Отправлено trotski , 05-Июл-06 16:45 
>Как бы вы реализовали функцию memmove(в самом простом варинте без проверок)
>
>int i,size=5;
>char *src="ABCDE";
>char *dst;
>
>
>
>for(i=0;i<size;i++) {
>dst[i]=src[i];

О каком dst[i] идет речь, если dst - всего лишь указатель?


"memmove"
Отправлено sasha , 05-Июл-06 17:01 
это не копия массива, а указателя !!!

  char * src = "ABCDE";
  char * dst = src;
  int i=0;

  while( *src != '\0') {
    printf("[%d]%c %c\n", i++, *(src++), *(dst++));
  }



"memmove"
Отправлено michelnok , 05-Июл-06 17:02 
>Укажите на ошибки плз

Вы реализовали memcpy, а memmove должна учитывать что области *src и *dst могут пересекаться.


"memmove"
Отправлено chip , 05-Июл-06 17:03 
>Как бы вы реализовали функцию memmove(в самом простом варинте без проверок)

man memmove. Реализация представлена в /usr/src/lib/libc/string/bcopy.c (Для FreeBSD). cvsweb.freebsd.org для поиска.