본문 바로가기
프로그래밍/C언어.

[C언어] 문자열 복사 함수 (strcpy, strncpy) 간단예제.

by K_Coder 2011. 3. 28.
strcpy  함수의 원형
char* strcpy(char* dest, const char* src);

src에 있는 내용을 dest로 복사한다.
하지만, 만약 dest의 크기가 원본의 크기보다 작다면? 오버플로우가 발생한다.
컴파일러에 따라 묵인하는 경우도 있다고는 하지만 언젠가 문제가 될수 있는 내용이다.

간단한 사용 예제

 

 

strncpy 함수의 원형
char* strncpy(char* dest, const char* src, size_t n);

문자열은 반드시 마지막에 문자열의 끝을 알려주는 null이 있어야 한다.
때문에 내가 10글자를 받고 싶다면 null을 포함해서 11개의 배열을 생성해야 한다.

strcpy와 같지만 복사하는 배열의 최대 길이를 정할 수 있다.
strcpy(복사받을주소, 복사할주소, 복사길이);

모든 문자열 관련 함수의 매개변수는 문자열의 주소, 일반적으로 문자열배열의 이름을 넣는다.
배열의 이름은 그 배열의 "시작주소상수" 이다.  

단, 내가 받을 수 있는 크기의 최대 길이보다 1작게 (마지막 null 자리를 위해서) 복사하고
마지막 배열에 문자열의 끝을 알려주는 null을 직접 입력해야 한다.


10개의 자리가 있지만 마지막 null을 위해 9개만 받아야 한다.
9개를 받은 후 10번째 자리. str2[9] 에 null을 직접 입력.
배열의 경우 0번부터 시작하므로 마지막 10번째 자리는 str2[9] 이다.

printf()에서 %s는 문자열의 시작주소를 받아서 null이 나올 때 까지 출력하는 방식이다.
따라서 문자열에는 반드시 null 있어야 한다. 미친듯이 출력하다가 운좋게 메모리에 쓰레기 값으로 0이 있어서
null 처리해 멈추거나 다른 문자열의 null 같은 곳에서 멈추거나.. 다른 응용프로그램의 영역을 침범해서 메모리 에러.

유용한 정보가 되셨다면 아래 손가락 버튼 한번 눌러주세요 ^-^