2019. 4. 17. 20:43ㆍProgramming/C, C++
C
에서 문자열을 조작하는 것은 생각보다 짜증나는 일이다. GLib을 사용하면 문자열 조작을 수월하게 할 수 있는데, 문서만 잘 읽어보면 어렵지 않게 활용할 수 있다. 일단 GLib이 포함되어있고, 문자열을 조작할 일이 생겼다면 이 글을 읽기보다 String Utility Functions: GLib Reference을 보도록 하자. 훨씬 도움될 것이다.
문자열을 자르거나 붙이는 등, 대부분의 것들은 문서에 포함되어있다. Reference에 없는 함수로 부족한 경우에는, strlib.h의 내용으로 구현 가능한 경우가 대부분이다. 내 경우에는 이 Reference 중 g_strsplit을 자주 사용하며, 이 글을 작성하는 이유도 사실 g_strsplit에 대한 내용을 정리하기 위함이다.
특정 토큰을 이용해서 문자열을 나누려면 g_strsplit
함수를 사용하면 된다. 이 함수는 string
, delimiter
, max_tokens
를 파라메터로 전달받으며, 문자열 배열만큼 메모리를 할당하여 반환하게 된다. 따라서 g_strsplit
을 사용하고 난 뒤에는, g_strfreev
를 이용하여 메모리 할당을 해제해줘야 한다. 간단한 예제는 다음과 같다.
gchar **splited_text = NULL;
gint count_splited_text = 0;
gint index_loop = 0;
splited_text = g_strsplit("bike,bus,car", ",", -1); //max_tokens값을 -1로 주면 최대치에 제한을 두지 않는다.
count_splited_text = g_strv_length(splited_text); //g_strv_length는 g_strsplit 안의 문자열 갯수를 반환한다.
for(index_loop=0; index_loop<count_splited_text; index_loop) {
g_message("%s", splited_text[index_loop]); //이 루프문은 "bike", "bus", "car"를 출력한다.
}
g_strfreev(splited_text); //g_strsplit으로 할당된 메모리를 해제해준다.
이 때 g_strsplit이 실패했을 경우에는 NULL을 반환하게 되는데, NULL체크를 하지 않고 사용하는 경우 NULL포인터 참조로 인해 프로그램이 종료될 수 있다. 따라서 사용하기 전에 반드시 NULL체크를 해줘야 한다.
Reference를 보다보면 파라메터에
str
과strv
가 있는데,str
로 표기된 것은 String을 나타내며strv
로 표기된 것은 String Array를 나타낸다. 이 점만 유념해서 본다면, 문자열을 덜 스트레스 받으면서 구현할 수 있다. :)
'Programming > C, C++' 카테고리의 다른 글
Onvif 라이브러리 크로스 컴파일 방법 정리 (0) | 2022.01.05 |
---|---|
libcrypt.so와 glibc의 크로스 컴파일에 대하여 (0) | 2020.05.18 |
[C/gLib] trim과 문자열을 찾는 함수 작성하기 (0) | 2019.04.26 |
[C/C++] 문자열 타입의 MAC ADDRESS 포멧 확인 (sscanf) (0) | 2019.03.19 |
[C/C++] 정수를 IP주소로 변환하기 (Decimal to IP Address) (0) | 2019.03.18 |