프로그래밍

 3198, 1/160 회원가입  로그인  
   jeongmin9946
   c언어 메모리 복사관련

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=6542 [복사]


#include<stdio.h>
#include <stdlib.h>
#include <string.h>

struct tagM1
{
        int x;
        int y;
        char buffer[30];
};

void* My_memcpy(void * dst, const void *src, unsigned int count);

void main (void)
{
        struct tagM1 x1,x2;

        x1.x=5;
        x1.y=10;
        strcpy(x1.buffer,"memory copy");
        printf("%d %d %d \n", sizeof(x1.x),sizeof(x1.y),sizeof(x1.buffer));

        My_memcpy(&x2,&x1,sizeof(x1));

        puts(x2.buffer);
        printf("%d %d \n", x2.x, x2.y);
}

void* My_memcpy(void * dst, const void *src, unsigned int count)
{
        void * ptr= dst;

        while(count--)
        {
                *(char*)dst = *(char*)src;
                dst= (char*)dst +1 ;
                src= (char*)src +1 ;
        }

        return ptr;
}

위의 소스는 메모리를 복사하는 함수 예제 인데요.  
왜 함수에서
void* My_memcpy(void * dst, const void *src, unsigned int count)
여기서 왜 void* 형을 사용하나요?
이 예제가 구조체를 복사하는 함수라서 void* 형을 쓰는건가요?
그리고 while 안에 쓰여진 (char*)는 void*형을 인자로 받아와서 자료형을 정해주는 역활인가요??
복사된 x2 를 보면 구조체 멤버 x,y 값도 복사가 됐는데 int형으로 복사
한건 없는거같은데 어느 구간? 에서 복사가 된건가요 ?

  Hit : 5515     Date : 2015/07/12 09:36



    
니와토리 음 void*형을 사용하면 더 범용적이라서 그런게 아닐까요?
(char*)를 사용하는건 1byte씩 이동하여 복사를 하기 위해 그러는것 같습니다.
2016/01/15  
menial return ptr;
때문이며 변수 선언시 그리하였고, 메인함수에서 사용하기 위한 것인데 사용 안함
2018/11/21