strcpy, strncpy 문자열 복사 함수


C에서 문자열을 복사하는 함수가 있다.

바로 strcpy 와 ctrncpy이다.

두 함수의 차이는 복사할 문자열 길이 설정 여부 이다.

아래와 같이 자세히 알아보도록 하겠다.


strcpy 일반 문자열 복사


strcpy 사용법은 아래와 같다.

#include<string.h>

char * strcpy( char * dest, const char * src )

ex) 

char destStr[128] = {0,};

char * srcStr = "hello world";

strcpy( destStr, srcStr );


2번째 인자 값에 있는 문자열을 첫번째 인자 값에 복사를 한다.

이때 주의 할 것이 2번째 문자열의 길이가 1번째 문자열 공간보다 많다면 overflow가 발생한다.

예를 들어 설명해보겠다.

2번째 인자의 문자열 값이 "abcde" 이렇게 5byte라고 하자.

1번째 인자의 문자열 공간이 destStr[3] 이렇게 3byte 밖에 없다고 하자.

그럼 5바이트를 3바이트 공간인 destStr에 복사를 하면 

공간보다 복사할 문자열이 더 크기 때문에 destStr 배열변수에 메모리 overflow가 발생한다.

overflow가 발생하면 원하는 결과를만들어 낼 수 없으니 주의해서 복사 한다.


[예제]

#include <stdio.h>

#include <string.h>

#include <string.h> //<--- strcpy 함수 사용을 위해 추가 한다. 


int main(int argc, char *argv[]) 

{

char destStr[128] = {0,};

const char * srcStr = "hello world";

strcpy( destStr, srcStr ); //호출 전에 destStr 공간이 충분한지 확인 한다. 

printf( " destStr[%s] \n",destStr);

return 0;

}



 실행 결과

 destStr[hello world]

 계속하려면 아무 키나 누르십시오...




strncpy 지정 된 길이만큼 문자열 복사


strncpy 사용법은 아래와 같다.

#include<string.h>

char * strncpy( char * dest, const char * src, size_t n )

ex) 

char destStr[128] = {0,};

char * srcStr = "hello world";

strncpy( destStr, srcStr, sizeof(destStr)-1 );


strcpy와 다른 점은 3번째 인자에 복사할 길이를 넣는 것이다.

strcpy를 사용시 overflow 발생 할수 있는 문제 점에 대해 말했다.

이러한 문제를 예방해줄 함수가 strncpy이다.

마지막 인자에 첫번째 인자 메모리 공간만큼만 복사하게 설정하면 overflow가 일어날 일이 없다.

이글을 읽는 분들도 꼭 strncpy를 사용하는 것을 습관화 하기를 바란다.


[예제]

#include <stdio.h>

#include <string.h>

#include <string.h> //<--- strncpy 함수 사용을 위해 추가 한다. 


int main(int argc, char *argv[]) 

{

char destStr[128] = {0,};

const char * srcStr = "hello world";

strncpy( destStr, srcStr, sizeof(destStr)-1 ); //길이를 넣어주기 때문에 overflow 걱정이 사라진다. 

printf( " destStr[%s] \n",destStr);

return 0;

}



 실행 결과

 destStr[hello world]

 계속하려면 아무 키나 누르십시오...





반응형

+ Recent posts