-
[C/C++] strtok ํจ์, ์ฃผ์์ฌํญC , C++ 2021. 8. 2. 15:01๋ฐ์ํ
- C์ธ์ด์ strtok ํจ์ ์ฌ์ฉ๋ฒ๊ณผ ์ฌ์ฉ ์ ์ฃผ์์ฌํญ์ ๋ํ ๊ธ์ ๋๋ค.
strtok
strtok API๋ char* ์ tokenizeํ์ฌ ๋ถํ ํ ๋ ์ฌ์ฉํ๋ ํจ์์ ๋๋ค.
์ฒ์ ํจ์ ํธ์ถ์, str ๋งค๊ฐ๋ณ์์๋ ํด๋น char* ์ด ๋ค์ด๊ฐ๊ฒ ๋์ด ์ฒ์ ์์์์น๋ฅผ ์๊ฒ ๋ฉ๋๋ค.
์ดํ ํธ์ถํ์ฌ ๋ถํ ํ๋ ๊ฐ์ ์๊ธฐ ์ํด์๋ str ๋งค๊ฐ๋ณ์์๋ null pointer๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๊ณ ๋ง์ง๋ง ํ ํฐ์ ๋ค์ ์์น๋ฅผ ์์์์น๋ก ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
strtok์ null character๊ฐ ๋ฐ๊ฒฌ๋ ๋๊น์ง ์คํ๋๋ฉฐ, ํ ํฐํํ๋ฉด ์๋์ ์ผ๋ก ๋ง์ง๋ง์์น์ null character๊ฐ ์ถ๊ฐ๊ฐ ๋ฉ๋๋ค. ์ด ๋ถ๋ถ์์ ๋ง์ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฉฐ, ์ฃผ์์ฌํญ์ ์์งํด์ผ ํฉ๋๋ค.
์์ธํ ๋ด์ฉ์ ๋ ํผ๋ฐ์ค๋ฅผ ์ฐธ์กฐํ๋ฉด ์ข์ต๋๋ค.
Parameters
str : ๋ถํ ํ๋ ค๊ณ ํ๋ C string
delimiters : ๋ถํ ํ๊ธฐ ์ํ ๊ธฐ์ค character
Return Value
๋ง์ฝ ๋ถํ ์ด ๋์ด ํ ํฐ์ด ์กด์ฌํ๋ค๋ฉด token์ ์์ pointer๋ฅผ ๋ฐํํ๊ณ ์๋ ์ null pointer๋ฅผ ๋ฐํํฉ๋๋ค.
null pointer๋ฅผ ๋ฐํํ๋ค๋ ๊ฒ์ C string์ ๋์์น๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
Example
#include <stdio.h> #include <string.h> int main () { char str[] ="- This, a sample string."; char * pch; printf ("Splitting string \"%s\" into tokens:\n",str); pch = strtok (str," ,.-"); while (pch != NULL) { printf ("%s\n",pch); pch = strtok (NULL, " ,.-"); } return 0; }
๋ ํผ๋ฐ์ค์ ์๋ ์์ ๋ฅผ ๊ฐ์ ธ์์ ์ค๋ช ์ ๋๋ฆฌ๋ฉด, str์ char ์ ์ ๋ฐฐ์ด๋ก ์ ์ธํ์์ต๋๋ค.
strtok paramter๋ฅผ ํ์ธํ๋ฉด char* ์ด๊ธฐ ๋๋ฌธ์ ์ ์ ๋ฐฐ์ด ์ด์ธ์๋ ๋ฐฐ์ด์ ํฌ์ธํฐ๋ฅผ ๋์ ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ปดํ์ผ ์๋ฌ๋ ๋ํ๋์ง ์์ ๋ฌธ์ ์์ด ๋ณด์ด์ง๋ง, ๋ฐํ์ ์ segmentation fault๊ฐ ๋ฐ์ํฉ๋๋ค.
char *str๋ก ์ ์ธํ์ฌ ๋งค๊ฐ๋ณ์ ์ ๋ ฅ ์ segmentation fault๊ฐ ๋ฐ์ํ๋ ์ด์ ๋ str์ ์ฝ๊ธฐ ์ ์ฉ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. strtok์ ๊ตฌ์ฒด์ ์ธ ์๋ฆฌ๋ delimiters์ ํด๋น๋๋ ๋ฌธ์๋ฅผ ์ฐพ๊ฒ ๋๋ฉด ๋ฐ๋ก ๋ฐํํ๋ ๊ฒ์ด ์๋ delimiters ๋ฌธ์์ ๋์ ์๋ ค์ฃผ๋ '\0'๋ฅผ ์นํํ๊ฒ ๋ฉ๋๋ค. ์ด ๋, ์ฝ๊ธฐ ์ ์ฉ ๋ฉ๋ชจ๋ฆฌ์ ์๋ str์ ๊ฐ์ง๊ณ ์ธ ์๊ฐ ์๊ธฐ ๋๋ฌธ์ segmentation fault๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ฐ์ํ'C , C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C/C++] Next_permutation ์ฌ์ฉ๋ฒ (0) 2021.08.01 [C/C++] C++ ์์์ ์ถ๋ ฅ (0) 2021.06.18