목표 :
string.h를 사용하지 않기 위해서
strycpy, strcpy_s 를 직접 구현해 보고 차이점을 확인해보자.
소스코드 :
#include <stdio.h>
char* strcpy(char *pDest, char* pSource);
char* strcpy_s(char *pDest, int BufferSize, char* pSource);
int main(void)
{
char*pSource = "오늘의 포스팅!!\n";
char Buffer1[256] = { 0, };
char Buffer2[256] = { 0, };
strcpy(Buffer1, pSource);
strcpy_s(Buffer2, sizeof(char) * 256, pSource);
printf(" buffer1의 내용 : %s", Buffer1);
printf(" buffer2의 내용 : %s", Buffer2);
return 0;
}
char* strcpy_s(char *pDest, int BufferSize, char* pSource)
{
int count = 0;
for (count = 0; count < BufferSize; count++) // 문자열 끝을 알리는 널이 없더라도 버퍼 사이즈를 카피하기때문에 문제가
{ // 되지 않는 안전장치가 들어 있는 셈입니다!!
pDest[count] = pSource[count];
if (pSource[count] == '\0')//문자열 끝이라면
{
break;
}
}
return pDest;
}
char* strcpy(char *pDest, char* pSource)
{
int count = 0;
for (count = 0; ; count++) // 만약 문자열 끝이 없다면 무한루프돌고 그러다 버퍼 사이즈를 넘겨 오버플로가 되서...ㅠㅠ
{ // 프로그램이 죽습니다...
pDest[count] = pSource[count];
if (pSource[count] == '\0')//문자열 끝이라면
{
break;
}
}
return pDest;
}
결과
#c언어입문, #c언어, #프로그램입문,#strcpy구현, #strcpy_s구현
'Programing - C > C Basic grammar ' 카테고리의 다른 글
060 strcmp, _stricmp 구현해보자 (0) | 2017.07.27 |
---|---|
059 strcmp, _stricmp (0) | 2017.07.27 |
057 strcpy, strcpy_s (0) | 2017.07.27 |
056 puts (0) | 2017.07.27 |
055 gets, gets_s (0) | 2017.07.27 |