ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.