strtokを使用して文字列madddyを分割する次のスニペットを考えてみましょう。strtokを理解しようとする
char* str = (char*) malloc(sizeof("Madddy"));
strcpy(str,"Madddy");
char* tmp = strtok(str,"d");
std::cout<<tmp;
do
{
std::cout<<tmp;
tmp=strtok(NULL, "dddy");
}while(tmp!=NULL);
出力はMaです。しかし、strtokを次のように変更することで、出力はMaddになります。だからstrtokはどういう仕組みになっていますか?私はこの問題を抱えています。なぜなら、strtokはデリミタ文字列に含まれるすべての文字をデリミタとして扱うことを期待していたからです。しかし、特定のケースではそうしていますが、ほとんどの場合予期しない結果が出ています。誰も私がこれを理解するのを助けることができますか?
私は正直これを行うための正しい方法は、完全に 'strtok'の使用を停止することだと思います。これは、スレッドセーフな保証がない、使いにくく、デバッグが難しい機能です。おそらく 'string :: find'と' string :: substr'の組み合わせを使って解析するのがよいでしょう。 – templatetypedef
または 'boost :: token_iterator' –
私はC言語ではなくC++を使用しているので、特に重要で強調するためにこれを繰り返していきたいと思います。また、boost :: tokenizeを調べることもできます。 –