강좌 & 팁
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 수를 줄일 수 있습니다.