重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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
}

A 回答 (2件)

標準関数ではないですが、strtok_r()を使うといちおうネストは出来ます。



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

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


だから, このようにネストして使うことはできません.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!