c로 프로그램을 개발 할 경우 가장 난감한 것이 문자열 처리 입니다.

그 중에서도 다른 개발 툴에서는 편하게 함수로 구현되어 있는 기능들이 c에서는 좀 복잡하게 구현해야 하는 것 들이 있곤 합니다.

문자열을 처리 할 때, 특히 문자열 중간에 있는 특정한 글자를 찾거나 구분자를 찾아가며 문자열을 나누어야 할 때 c 에서 유용하게 사용 할 수 있는 함수가 index() 함수 입니다.

 

 

char *index( char *str1, char ch )  는 str1 문자열을 처음부터 검색하여 ch 글자를 찾아 그 위치를 되돌려 줍니다.

char *rindex( char *str1, char ch ) 는 str1 문자열을 뒤부터 검색하여 ch 글자를 찾아 그 위치를 되돌려 줍니다.

 

문자열을 찾지 못하였다면 NULL 이 돌아 옵니다.

 

 #include <strings.h>
#include <stdio.h>

int main()
{
    char data[] = www.falinux.com=ok;
    char *sp, *dp;
    char mydata[126] = {0x00,};

    sp = index(data, '.');
    dp = rindex(data, '=');

    strncpy(mydata,sp+1, dp-sp-1);
    printf("[%s]\n", mydata);
}

 

결과는

[falinux.com]

입니다.

 

strncpy(mydata,sp+1, dp-sp-1);
 

위의 문장을 보면

mydata 에 문자열을 copy 하는데,

copy의 시작 위치는 sp, 즉 index에 의하여 앞에서 부터 찾아낸 '.' 글자의 위치 입니다.

dp-sp-1 은 dp , 즉 rindex에 의하여 찾아낸 '=' 글자 위치 입니다.

'.' 에서 부터 '=' 까지 이기 때문에 '.falinux.com' 의 글자 수가 dp-sp 의 답입니다.

여기에 '.' 다음 위치 부터 '=' 전 위치까지 '.falinux.com' 의 글자수 만큼 이므로 1을 더 빼면 falinux.com 의 글자수가 나옵니다.

 

index  함수는 문자열을 다를때 유용하게 사용할 수 있으며, 특히 문자열로 구성된 프로토콜을 분석 할 때에는 프로그램의 code 수를 줄일 수 있습니다.