ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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
Designed by Tistory.