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]

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





반응형

CodeBlock 무료툴 사용 방법



CodeBlock은 C, C++ 무료 IDE TOOL 이다.

CodeBlock 설치, 설정, 실행 순으로 하나씩 알아가보도록 하겠다.



CodeBlock 설치


1. 싸이트 접속한다.

    http://www.codeblocks.org/



2. 싸이트 좌측에 Downloads를 클릭 한다.



3. 싸이트 중간에 Download the binary release를 클릭 한다.




4. 싸이트 중간에 codeblocks-16.01mingw-setup 옆에 Sourceforge.net을 클릭 한다.

    ※codeblocks-16.01mingw-setup 로 하지 않으면 mingw를 따로 설치 해야 하기 때문에 해당 설치 파일을 받는다.



5. 다운이 완료되어 설치 파일을 실행 하면 아래와 같은 화면이 나온다.

    Next 버튼을 눌러 설치를 진행 한다.



6. I agree 버튼을 눌러 설치를 진행 한다.



7. 설치 목록은 수정하지 말고 Next 버튼을 눌러 설치를 진행 한다.



8. 설치가 진행 중이다.



9. 설치가 완료 되고 지금 실행 할거냐는 물음에 '예' 버튼을 누른다.





CodeBlock 설정


1. CodeBlock이 실행되면 우측 메뉴 중 Settings를 누른다.

    하위 목록 중 Compiler...를 선택 한다.



2. Toolchain executables 탭을 선택 한다.

   Auto-detect를 하면 MinGW가 설치된 곳을 찾는다.

   확인 버튼을 누른다.

   ※ 설치할 때 MinGW를 포함한 설치 파일로 하지 않았을 경우 재 설치 혹은 MinGW를 따로 설치해 준다.



CodeBlock 실행


1. 새로운 프로젝트를 만들어 실행해 보자

    File -> New -> Project 순으로 선택 한다.



2. Console application -> Go 순으로 선택 한다.



3. Next를 선택 한다.



3. C 선택 -> Next 선택 한다.



4. Project title을 입력한다. ( 임의로 입력해도 된다. )



5. Finish를 선택 한다.



6 프로젝트 파일 목록 창과 소스파일 창이 출력 된다.

   기본적으로 실행 할 수 있도록 코드가 만들어져 있다.

   메뉴 중간에 ▶ 버튼을 눌러 실행해 본다.



7. 아래와 같이 Hello world!가 출력 된다.




반응형

strlen 문자열 길이를 확인 하는 함수


사용자가 선언한 char 배열 안에 담겨져 있는 문자열의 길이를 확인 하는 함수 있다.

char 배열 안에 문자가 얼만큼 들어있는지, 문자열 데이터를 가지고 있는지 확인하는데 유용하다.



strlen 사용법


strlen 사용법은 아래와 같다.

size_t strlen( const char * )

ex) 

int size = strlen( str );

printf( "size[%d]", size );


예제를 통해 좀더 자세히 확인해 보겠다.

#include <stdio.h>

#include <string.h>


int main()

{

char str[100] = "안녕하세요" ;

int strSize = strlen(str);

printf( "strSize[%d]\n", strSize );

}


 실행 결과

 strSize[10]

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


str[100] -> 배열은 100byte 선언을 했지만 해당 변수에 담겨져 있는 값은 "안녕하세요" 한글 5글자만 넣었다.

한글은 한글자 당 2byte 이므로 strlen 결과는 총 5글자 * 2byte = 10byte가 나와야 한다.

위에 실행 결과를 보면 strSize는 10인 것을 확인 할 수 있다.








반응형

문자열 단위 입출력 함수 gets(), puts()


콘솔 환경에서 문자열 단위로 입력 받고 출력하는 C 함수에 대해서 알아보겠다.

gets는 문자열 단위로 입력 받는 함수 이며 puts는 반대로 문자열 단위로 출력하는 함수 이다.


gets, puts 사용법



각 함수의 사용 방법은 아래와 같다.

#include <stdio.h>

int puts(const char* s);
char * gets(char* s);

두 함수를 사용법은 예제를 통해 확인해 보겠다.


#include <stdio.h>


int main()

{

char text[256] = {0,};


puts("문자열을 입력해 주세요\n");

gets(text);


puts("입력된 문자열 : ");

puts(text);


return 0;

}


 실행 결과

 문자열을 입력해 주세요


 테스트 문자열

 입력된 문자열 :

 테스트 문자열

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


1. "char text[256] = {0,};" -> gets를 통해서 입력 받을 char 배열 버퍼를 충분히 생성 후 초기화 한다.

2. "puts("문자열을 입력해 주세요\n");" -> puts를 통해 문자열을 출력 한다.

3. "gets(text);" -> gets를 통해 문자열을 text 배열 버퍼로 입력 받는다. 









반응형

+ Recent posts