다시 복습하네요. 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[] = "stirng2"; // 변경 가능
- strtok
1st는 source이고, delimiter에 구분하고자 하는 문자들을 string 형태로 넣는다.,
strtok는 source에서 delimiter를 NULL 변경하는 작업이다.
한번 호출할 때마다 , 한번식 delimiter를 NULL로 변경하고, 하나의 string 이 생긴다.
그래서 return이 NULL이 될 때까지 호출을 하면 모두를 변경하고 나오는 것이다.
1st string 대신 NULL 값을 넣으면, 그전에 사용하시던 source pointer 를 값을 기억한다.
- strpbrk
동일하다고 생각하고 , 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