C 언어 char * strcat 질문입니다
글쓴이: ets0802 / 작성시간: 화, 2015/04/28 - 10:31오전
현재 컴공 재학중인 학생이고 C 언어책 보던 중에 궁금한게 생겨서 질문드립니다.
strcat함수가 아래와 같을 때, s2는 s1의 null character 위치부터 s2를 복사하기 시작하잖아요?
그런데 만약, s1이 100~105번지를 차지하고 있고 어떤 데이터가 106~110번지를 차지하고 있을 때, 오류가 생겨야 하지 않나요?
만약 그렇다면 문제가 있는 함수가 아닌가요?
char *strcat(char *s1, const char *s2)
{
char *p=s1;
while(*p!='\0')
p++; // s1 문자열의 끝을 찾아 p에 주소를 저장
while(*s2 != '\0')
{
*p = *s2; // s1 문자열 끝에 s2 주소를 저장.
p++;
s2++;
}
*p='\0';
return s1;
}
Forums:
답변
1. 그렇게 사용한다면 문제가 됩니다.
예를 들어 다음과 같이 사용하는 경우에, 문자열 배열보다 큰 크기의 문자열을 복사하려고 하면
결과는 이상한 문자열이 출력될 수도 있고, 오류를 일으키며 종료하거나 그렇지 않을 수도 있습니다. (대개는 이상한 문자열이 나옵니다만)
2. 보통 함수를 사용한다고 하면, 함수의 인자가 알아서 적당하게 넘어온다고 가정하거나, 어떻게 넘겨야 하는지 설명하는 경우가 많습니다.
단순히 사용을 잘 못해서 오류가 나타나는 함수를 문제가 있는 함수라고 판단할 수는 없지요.
저는 이렇게 생각했습니다.
답변 감사합니다
제대하고 다시 하려니까 많이 힘드네요.
댓글 달기