• ベストアンサー

strtokについて

strtokを使うにあって注意すべき点がしりたいのですが、 test1やtest2は書き換わるので、変わっては困る場合は あらかじめコピーしておくのは理解しましたが、 strtokをネストして使う場合、(1)で必ずNULLになります。 strtokはネストでは使えないのでしょうか? また、他に注意点があるのでしたら教えてください。 あと、C++では、strtokより便利なものはありますか? char test1[] = "111,222,333"; char test2[] = "333,222,111"; char *p, *q; int flag; p = strtok(test1, ","); while ( p != NULL ) { flag = 0; q = strtok(test2, ","); while ( q != NULL ) { if (0 == strcmp(p, q)) { flag = 1; break; } q = strtok( NULL, ","); } if (flag == 0) { return 1; } p = strtok( NULL, ","); // <------- (1)ここで必ずNULL }

質問者が選んだベストアンサー

  • ベストアンサー
  • tokichim
  • ベストアンサー率42% (88/205)
回答No.2

標準関数ではないですが、strtok_r()を使うといちおうネストは出来ます。 strtok()は#1の回答の理由で、使うべきでない関数とされていますので、別の方法を考えた方がいいです。 strtok()の代替手法はネットを検索すれば山ほど出てくるので、そちらを参照してください。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

strtok は内部にこっそりデータを持っていて, 探索すべき文字列 (のアドレス) として NULL が与えられると, この「こっそり持っているデータ」を使って探索を継続します. だから, このようにネストして使うことはできません.

すると、全ての回答が全文表示されます。

関連するQ&A