-
C언어 문자열 복사 [strcpy()]Visual Studio/C 기초 2013. 6. 15. 15:35
함수 strcpy()는 전체 문자열을 다른 메모리 영역으로 복사합니다.
strcpy()를 사용할 때에는 복사할 문자열을 저장하기 위한 영역을 할당해야 합니다. 이 함수는 새로 복사할 공간이 이미 할당 되어 있는 영역인지 알 수 없습니다. 만약 메모리 영역이 할당되지 않았다면 함수는 새로 복사할 공간부터 시작하여 strlen(source)만큼의 메모리 영역을 덮어쓸 것입니다.
이것은 예상할 수 없는 문제를 일으킵니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>char name[80];
main()
{
char anew[80];
char *anew2, *anew3;printf("문장을 입력해주세요 : ");
gets(name);strcpy(anew, name); //anew에 name의 내용을 복사합니다.
printf("복사된 내용1 : %s\n",anew); //이 것은 이미 anew의 공간을 할당 하였으므로 오류가 생기지 않고 정상적으로 작동합니다.anew2 = (char *)malloc(strlen(name)+1); //malloc 함수를 이용해 공간을 할당하였습니다.
strcpy(anew2,name);
printf("복사된 내용2 : %s\n",anew2);strcpy(anew3,name); //공간을 할당하지 않고 바로 복사를 시도합니다.
printf("복사된 내용3 : %s\n",anew3);
free(anew2);
}anew2까지만 복사되고 anew3에선 복사가 되지 않아 위와 같은 오류가 발생하였습니다. 내용을 읽어보면 anew3에서 공간을 할당하지 않아 오류가 발생했다고 나오네요.
'Visual Studio > C 기초' 카테고리의 다른 글
strdup() (0) 2013.06.17 strncpy() (0) 2013.06.15 C언어 문자열 길이 계산 [strlen()] (2) 2013.06.15 C언어 임시파일 사용 [tmpnam()] (0) 2013.06.15 C언어 파일 복사 (0) 2013.06.14