고흐의 연구실/C언어와 C++

[C언어] 구조체 메모리 사용 함수 memset(), memcpy()

전고흐 2020. 8. 10. 00:47
728x90

**메모리를 가르켜야 하므로, 동적할당의 경우 변수만 건네주지만, 동적할당이 아닌경우는 &를 써서 주소값을 넘겨주어야 합니다.

memset()

  • memset(구조체포인터, 설정할값, sizeof(struct 구조체));
  • 헤더 : string.h

ㅇExample

  - 일반 구조체

#include <stdio.h>
#include <string.h> // memset 함수가 선언된 헤더 파일

struct Point2D {
    int x; int y;
};

int main()
{
    struct Point2D p1;
    memset(&p1, 0, sizeof(struct Point2D)); // p1을 구조체 크기만큼 0으로 설정
    printf("%d %d\n", p1.x, p1.y); // 0 0: memset을 사용하여 0으로 설정했으므로 // x, y 모두 0
    return 0;
}

  - 동적 할당 구조체

#include <stdio.h>
#include <stdlib.h> // malloc, free 함수가 선언된 헤더 파일
#include <string.h> // memset 함수가 선언된 헤더 파일

struct Point2D {
    int x; int y;
};

int main()
{
    struct Point2D *p1 = malloc(sizeof(struct Point2D)); // 구조체 크기만큼 메모리 할당
    memset(p1, 0, sizeof(struct Point2D)); // p1을 구조체 크기만큼 0으로 설정
    printf("%d %d\n", p1->x, p1->y); // 0 0: memset을 사용하여 0으로 설정했으므로 // x, y 모두 0
    free(p1); // 동적 메모리 해제
    return 0;
}

 

memcpy()

  • memcpy(목적지포인터, 원본포인터, 크기);
  • 헤더 : string.h
    • void *memcpy(void *_Dst, void const *_Src, size_t _Size);
    • 목적지 포인터를 반환
    • 뒤에꺼를 앞에꺼에 복사! 사이즈만큼

ㅇExample

  - 일반 구조체

memcpy(&p2, &p1, sizeof(struct Point2D)); // Point2D 구조체 크기만큼 p1의 내용을 p2로 복사

  - 동적 할당 구조체

memcpy(p2, p1, sizeof(struct Point2D)); // Point2D 구조체 크기만큼 p1의 내용을 p2로 복사

 

728x90