2017-03-29 4 views
0

strtok에 대해 한 번 더 delim을 사용하는 방법이 있습니까? load 나 init 둘 중 하나에서만 작동하도록 코드를 얻을 수 있지만 둘 다 사용할 수는 없습니다.C에서 strtok에 delim을 두 번 이상 사용할 수 있습니까?

if ((tok = strtok(choice, " ")) && strcmp(tok, COMMAND_LOAD) == 0){ 
    tok = NULL; 
    if((tok = strtok(tok, " ")) != NULL){ 
    /*some code*/ 
    } 
} 
else if((tok = strtok(choice, " ")) && strcmp(tok, COMMAND_INIT) == 0){ 
    tok = NULL; 
    if((tok = strtok(tok, ",")) != NULL){ 
    /*some code*/ 
    } 
} 
+0

'tok'를'NULL'로 설정하고 문자열로 사용하려고하면 많은 것을 얻지 못할 것입니다. 'tok = strtok (choice, "")'를 한 번하고 if/else if에서'tok'를 체크 할 수 있습니다. – Schwern

+0

@Schwern 올바른 사용법입니다. * man strtok (3)을 보시오. * – EJP

+0

@EJP 아 맞다. strtok은 사기꾼이다. – Schwern

답변

4

strtok 기능하지 재진입, 여러 동시 tokenizations에 사용할 수있다 : 예를 코드하는 strtok를로드 # 또는 INIT # # 방향의 형태로 사용자로부터 입력 토큰 사용 .

가지고 계시다면 strtok_s을 사용하십시오. 또는 strtok_r 있습니다.

+1

또는 [strsep] (https://linux.die.net/man/3/strsep). – Schwern