[C언어 소스] 문자열 복사하는 함수 만들기(버퍼 오버플로우 방지)

알고리즘

문자열 복사하기(dest:복사할 버퍼, dsize:버퍼 길이, src: 원본 문자열)

….dsize 1감소

…..origin:= dest

….반복(dsize가 참이면서 dest가 가리키는 곳에 src가 가리키는 문자 대입)//대입한 결과가 참이면 반복

……..dest와 src를 다음 위치로 증가, dsize 1감소

….dest가 가리키는 곳에 종료 문자 대입

….origin 반환

문자열 복사 실행 화면

소스 코드

//문자열 복사 - 버퍼 오버플로우 방지
#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;
}