2017-03-29 11 views
0

strtokに複数回デリミタを使用する方法はありますか?私はloadまたはinitのどちらかで動作するようにコードを取得できますが、両方では動作しません。例はstrtok負荷位または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_sを使用してください。またはstrtok_rありますか?

+1

または[strsep](https://linux.die.net/man/3/strsep)。 – Schwern

関連する問題