memcpy_s
헤더 파일
[언어 자료구조 알고리즘/C11 표준 라이브러리 함수] - string.h
errno_t memcpy_s(void * dest,size_t size, const void * source, size_t n); 메모리 복사하는 함수
입력 매개 변수 리스트
dest 복사 대상 버퍼
size 복사 대상 버퍼 크기
source 복사할 원본
n 복사할 바이트 수
반환 값
에러 번호
memcpy 함수는 복상 대상 버퍼 크기보다 복사할 바이트 수가 더 크면 버퍼 오버플로우 버그가 발생합니다.
이를 개선한 함수가 memcpy_s 함수입니다.
사용 예
//C언어 표준 라이브러리 함수 사용법 가이드
//errno_t memcpy_s(void * dest,size_t size, const void * source, size_t n); 메모리 복사하는 함수
//Member 구조체 형식 변수 두 개의 값을 교환하여 출력
#include <string.h>
#include <stdio.h>
#define MAX_NAMELEN 20
typedef struct
{
char name[MAX_NAMELEN];
int age;
}Member;
void Swap(Member *m1, Member *m2)
{
Member temp;
memcpy_s(&temp,sizeof(Member),m1,sizeof(Member));//m1의 데이터를 temp 주소로 복사
memcpy_s(m1,sizeof(Member),m2,sizeof(Member)); //m2의 데이터를 m1으로 복사
memcpy_s(m2,sizeof(Member),&temp,sizeof(Member));//temp 주소의 데이터를 m2에 복사
}
int main(void)
{
Member m1={"홍길동",20};
Member m2={"강감찬",27};
printf("바꾸기 전\n");
printf("이름:%s 나이:%d\n",m1.name,m1.age);
printf("이름:%s 나이:%d\n",m2.name,m2.age);
Swap(&m1,&m2);//m1 주소와 m2 주소의 데이터를 교환
printf("바꾸기 후\n");
printf("이름:%s 나이:%d\n",m1.name,m1.age);
printf("이름:%s 나이:%d\n",m2.name,m2.age);
return 0;
}
출력
바꾸기 전
이름:홍길동 나이:20
이름:강감찬 나이:27
바꾸기 후
이름:강감찬 나이:27
이름:홍길동 나이:20
사용한 함수
[언어 자료구조 알고리즘/C11 표준 라이브러리 함수] - printf
관련 함수
[언어 자료구조 알고리즘/C11 표준 라이브러리 함수] - memcpy
[언어 자료구조 알고리즘/C11 표준 라이브러리 함수] - memmove
'언어 자료구조 알고리즘 > C11 표준 라이브러리 함수' 카테고리의 다른 글
atol 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
---|---|
atoi 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
atof 함수 [C언어 표준 라이브러리 함수 사용법 가이드] (0) | 2016.01.03 |
stdlib.h [C언어 표준 라이브러리 함수 가이드] (2) | 2016.01.03 |
memset 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
memcmp 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
memmove 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
memcpy 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
strerr 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
strtok_s 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |