Dailelog

C_string_strcpy 본문

언어/C언어

C_string_strcpy

Daile 2022. 4. 27. 15:51
#include <stdio.h>
#include <string.h>
void my_strcpy(char *to,char *from)
{
     while(*to++ = *from++);
}
main()
{
     //char *x = "kim";
     char *x = "Kim taegyun";
     char y[4]; // 이렇게 되면 기억 장소가 확보 되어 있어야 다른 변수의 기억장소에 영향을 주는 것을 막을 수 있다.
     //충분히 넉넉하게 용량을 확보 해야 한다.
     //char *y = "Lee";// x,y 둘다 기억장소를 가르키고 있을때
     //x의 "Kim"을 y의 "Lee"는 static area에 옮길때 상수풀에 있어 수정을 할수 없기 때문에 런타임 에러가 뜬다.
     //char *y; // <= 쓰레기 값 우리가 접근이 안되서 런타임에러
     /*
     char *x = "kim";
     char y[10];
     */
     my_strcpy(y,x);
     //strcpy(y,x);
     printf("y = %s\n",y);
     //strcpy 사용시 주의할점
     //
}

strcpy함수는 문자열을 복사할 때 사용되는 함수이다. strcpy함수를 사용할 때 주의 할점은 크게 3가지 정도가 존재한다. 첫번째는 문자열을 복사해서 값을 수정할때 수정되는 값이 저장되는 공간을 확보하지 않는 경우 Ex) char *y; 의 경우 y가 가르키는 곳의 쓰레기 값이 들어가 있어 런타임 에러가 발생하게 된다. 

두번째는 y의 이미 다른 문자열이 초기화되어 있다면 메모리 static area에 상수풀에 있어 수정할 수 없기 때문이 이또한 런타임 에러가 발생하게 된다. 그리고 마지막 세번째는 저장되는 y의 충분한 장소가 확보되어 있지 않으면 당장은 실행 될수 도 있지만 다른 변수의 주솟값에 영향을 주어 아주 특이한 값변화가 일어나 통제가 힘들기 때문에 충분한 공간을 확보해야 한ㄷ.

반응형
LIST

'언어 > C언어' 카테고리의 다른 글

C_dynamic allocation  (1) 2022.05.03
C_string_strcmp  (0) 2022.04.27
C_포인터 사용 목적  (1) 2022.04.26
C_string_strlen  (0) 2022.04.25
C_2차원 배열_ 함수 이용(2 Dimensional Array)  (0) 2022.04.22