Public 131

iconv 를 이용한 문자열 변환(utf-8)

리눅스에서 많은 함수들을 지원하지만 그중에서 iconv의 사용법에 대한 설명이다. iconv는 아래 예에서 든 캐릭터셋 이외에도 훨씬 많은 캐릭터간의 변환이 가능하다 #include size_t iconv(iconv_t cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft); 아래 예제는 utf-8에서 euc-kr로 변환하는 소스이다 #include #include #include #include int main() { char * sourceP = NULL; char * destP = NULL; char sourceBuffer[1024]; char destBuffer[1024]; int size1 = 0; int size2..

Public/tip & tech 2009.05.12

valgrind

간단한 사용법 $ valgrind --leak-resolution=high --trace-malloc=yes --leak-check=yes --show-reachable=yes -v [프로그램 전체 경로] $ valgrind --leak-resolution=high --leak-check=yes --show-reachable=yes -v [프로그램 전체 경로] $ valgrind --db-attach=yes --leak-resolution=high --leak-check=yes --show-reachable=yes -v ./test_hanl 실행이 끝난 다음에 malloc/free 된 메모리들에 대한 현황을 ERROR SUMMARY라는 이름으로 알려줍니다. leak된 것들이 있다면 어떤 종류이고 어떤 내..

Public/tip & tech 2009.05.12

Killed (+++ Killed by SIGKILL +++ )

$ ./test Killed $ strace ./test execve("./test", ["./test"], [/* 28 vars */]) = 0 +++ killed by SIGKILL +++ 어제까지 잘 동작하던 프로그램이 실행만 시키면 바로 죽어 버린다. 물론 gdb로 먹지 않고 strace로 찍어보니 시스템에서 kill signal이 날라오는것 같다. 원인은 간단했다. test.c에서 include 하는 헤더파일에 #define MAX 100000000 static int arr[MAX] 이런식으로 정의했더니 위와 같은 현상이 나타나는것이었다.. 물론 MAX의 크기를 줄였더니 문제는 없어졌다.

Public/tip & tech 2009.05.12

보이어 무어(boyer moore) 알고리즘

string = 'here is a simple example' pattern = 'example' BM의 특징은 패턴의 마지막 글자부터 비교를 한다는 것이다. 다른 한가지는 initialize를 한다는것이다. 여기서 말하는 초기화란 다음과 같다. 우선 영어의 경우 1바이트로 표현하기 때문에 1바이트가 가질수 있는 최대 크기는 256이다. 따라서 256개의 interger 배열을 선언하고 배열안에는 패턴의 길이로 초기화를 한다. 'example'의 경우는 7로 초기화를 한다. 그리고 'example'의 각 글자에 해당하는 알파벳에는 다른알파벳과 다른 숫자로 초기화를 한다. 초기화할 배열을 arr로 하면 arr[e] = 6 arr[x] = 5 arr[a] = 4 arr[m] = 3 arr[p] = 2 ar..

Public/tip & tech 2009.05.12

유니코드(uni) 를 utf8로 변환 (euc-kr <-> utf-8)

우리나라의 많은 DB와 웹페이지들이 아직까지도 여전히euc.kr로 되어 있는곳을 볼수 있다. 그런데 나처럼 검색쪽 일을 하다보면 자연스럽게 euc-kr에서 utf-8로 변환해야할 필요성이 발생하게 된다. 다국어 처리와 같은 문제도 있겠지만 한국어 처림내에서도 euc-kr은 한계가 있기 때문에 euc.kr에서 utf-8로 변환과정은 불가피해 보인다. 아래는 UCS2 => UTF-8로 변환하는 과정이다. 입력 어절 가 => 0xAC00(UCS-2) 0xAC00 => 10101100 00000000 0xF000 11110000 00000000 & ---------------------------- 10100000 00000000 >> 12 00000000 00001010 0XE0 00000000 1110000..

Public/tip & tech 2009.05.12