9/11/2016

C언어의 String 함수 예제

C언어에서 String.h 에 대해 완벽히 이해하지 못하는 것 같아,
다시 복습하네요. String 함수의 return 값들도 중요한 것 같네요.

함수설명
복사
void * memcpy ( void * destination, const void * source, size_t num );source가 가리키는 곳 부터 num바이트 만큼을 destination이 가리키는 곳에 복사한다.
void * memmove ( void * destination, const void * source, size_t num );source가 가리키는 곳 부터 num바이트 만큼을 destination이 가리키는 곳으로 옮긴다.
char * strcpy ( char * destination, const char * source );source를 destination에 복사한다.
char * strncpy ( char * destination, const char * source, size_t num );source에서 destination으로 처음 num개의 문자들을 복사한다.
병합
char * strcat ( char * destination, const char * source );source를 destination뒤에 붙인다.
char * strncat ( char * destination, char * source, size_t num );source에서 destination뒤에 처음 num개의 문자들을 붙인다.
비교
int memcmp ( const void * ptr1, const void * ptr2, size_t num );ptr1이 가리키는 처음 num바이트의 데이터와 ptr2가 가리키는 처음 num바이트의 데이터를 비교한다.
int strcmp ( const char * str1, const char * str2 );str1과 str2를 비교한다.
int strcoll ( const char * str1, const char * str2 );strcmp와 비슷하지만 LC_COLLATE에 정의되어 있는 방식에 따라 해석 된 후 비교한다.
int strncmp ( const char * str1, const char * str2, size_t num );str1의 처음 num개의 문자를 str2의 처음 num개의 문자와 비교한다.
size_t strxfrm ( char * destination, const char * source, size_t num );source를 현재 지역 정보에 따라 문자열을 변환한 후 변환한 문자열의 처음 num개 문자를 destination에 복사한다.
탐색
void * memchr ( const void * ptr, int value, size_t num );ptr이 가리키는 메모리의 처음 num바이트 중에서 처음으로 value와 일치하는 값(문자)의 주소를 반환한다.
char * strchr ( const char * str, int character );str에서 처음으로 character와 일치하는 문자의 주소를 반환한다.
size_t strcspn ( const char * str1, const char * str2 );str2에 들어있는 문자들 중 str1에 들어있는 문자와 일치하는 것이 있다면 첫 번째로 일치하는 문자까지 읽어들인 수를 반환한다.
char * strpbrk ( const char * str1, const char * str2 );str1에서 str2에 들어 있는 문자들을 찾아 str2의 문자들 중 str1의 문자들과 첫 번째로 일치하는 문자의 주소를 반환한다.
char * strrchr ( const char * str, int character );str에서 마지막으로 character와 일치하는 문자의 주소를 반환한다.
size_t strspn ( const char * str1, const char * str2 );str2의 문자들만을 포함하고 있는 str1의 처음 부분의 길이를 구한다.
char * strstr ( const char * str1, const char * str2 );str1에서 str2를 검색하여 가장 먼저 나타나는 곳의 위치를 반환한다.
char * strtok ( char * str, const char * delimiters );str1을 delimiters의 문자들로 분리한다.
기타
void * memset ( void * ptr, int value, size_t num );ptr이 가리키는 메모리의 처음 num바이트를 value값(문자)으로 채운다.
char * strerror ( int errnum );errnum(보통 errno)을 해석한 뒤 그에 해당하는 에러 문자열의 포인터를 반환한다.
size_t strlen ( const char * str );str의 길이를 반환한다.

 https://ko.wikipedia.org/wiki/String.h

1.  strtok, strpbrk

저는 이 두 함수를 자주 사용하지 않는 함수지만 Parsing 할때 아주 유용하게 사용할 수 있을 것 같다. 사용법은 아주 유사하기에 비교하면 설명하겠다.
  • fixxed string size 차이 
*char  = "string1";    // 변경 불가능
 char[]  = "stirng2";  //  변경 가능

  • strtok 
argument는 1st str 와 2nd str 이 있으며, 2nd str을 delimiters라고 한다.
1st는 source이고, delimiter에 구분하고자 하는 문자들을 string 형태로 넣는다.,
strtok는 source에서 delimiter를 NULL 변경하는 작업이다.
한번 호출할 때마다 , 한번식 delimiter를 NULL로 변경하고, 하나의 string 이 생긴다.
그래서 return이 NULL이 될 때까지 호출을 하면 모두를 변경하고 나오는 것이다.

1st string 대신 NULL 값을 넣으면, 그전에 사용하시던 source pointer 를 값을 기억한다.
  • strpbrk
동작원리는 strtok와 유사하지만, 전체 string을 변경하지는 않고, 두번째 argument가 상위 delimiter 개념하고
동일하다고 생각하고 , delimiter들의 위치만 알려준다고 생각하면 되겠다. .

delimiter를 제거하기위해 항상 pointer에 +1를 해줘야 한다. 


https://www.tutorialspoint.com/c_standard_library/c_function_strtok.htm
https://www.tutorialspoint.com/c_standard_library/c_function_strpbrk.htm