[C언어 소스] 문자열 복사, 버퍼 오버플로우 방지
문자열 복사하기(dest:복사할 버퍼, dsize:버퍼 길이, src: 원본 문자열)
dsize 1감소
origin:= dest
반복(dsize가 참이면서 dest가 가리키는 곳에 src가 가리키는 문자 대입)//대입한 결과가 참이면 반복
dest와 src를 다음 위치로 증가, dsize 1감소
dest가 가리키는 곳에 종료 문자 대입
origin 반환
소스코드
//13. 문자열 복사 - 버퍼 오버플로우 방지
#include <stdio.h>
char *mystrcpy_s(char *dest, size_t dsize, const char *src);
int main(void)
{
char source[100] = "Hello World";
char dest[100];
printf("원본 문자열:%s\n", source);
mystrcpy_s(dest, sizeof(dest), source);
printf("복사 결과 문자열: %s\n", dest);
return 0;
}
char *mystrcpy_s(char *dest, size_t dsize, const char *src)
{
char *origin;
dsize--;//맨 마지막에 종료 문자('\0')를 추가해야 하므로 버퍼 길이를 1 감소
//dsize가 0이 아니고 복사한 문자가 참이면 반복
for (origin = dest; (dsize) && (*dest = *src); dest++, src++, dsize--);
*dest = 0;//종료 문자 복사
return origin;
}
'언어 자료구조 알고리즘 > C언어 예제' 카테고리의 다른 글
[C언어 소스] 파일 읽기 isupper,islower,isdigit 함수 사용 (0) | 2016.04.03 |
---|---|
[C언어 소스] 파일의 소문자, 대문자, 숫자문자, 공백, 라인, 기타문자 개수 출력 (0) | 2016.04.03 |
[C언어 소스] 파일 이름을 입력받아 파일 내용을 콘솔 화면에 출력 (3) | 2016.04.03 |
[C언어 소스] 부분 문자열 복사, 버퍼 오버플로우 방지 (0) | 2016.04.03 |
[C언어 소스] 부분 문자열 복사 함수 (0) | 2016.04.03 |
[C언어 소스] 문자열 복사 함수 만들기 (0) | 2016.04.03 |
[C언어 소스] 부분 문자열 비교 함수 만들기 (0) | 2016.04.03 |
[C언어 소스] 문자열 비교 함수 만들기 (0) | 2016.04.03 |
[C언어 소스] 문자열 길이 계산 함수 만들기 (0) | 2016.04.03 |
[C언어 소스] 1월 1일 요일 입력받아 달력 출력 (2) | 2016.04.03 |