私は並行して3つの値を解析していますが、それらは特定の区切り文字で区切られています。連続した区切り文字でstrtok_sの振る舞い
token1 = strtok_s(str1, separator, &nextToken1);
token2 = strtok_s(str2, separator, &nextToken2);
token3 = strtok_s(str3, separator, &nextToken3);
while ((token1 != NULL) && (token2 != NULL) && (token3 != NULL))
{
//...
token1 = strtok_s(NULL, separator, &nextToken1);
token2 = strtok_s(NULL, separator, &nextToken2);
token3 = strtok_s(NULL, separator, &nextToken3);
}
「 - 」が私のセパレータであるとします。しかしながら
1
2
3
45
二つの連続するセパレータの文字列:
1-2--3-45
を
1-2-3-45
効果的にこれらの部品のそれぞれをもたらす:現象がない連続セパレータとの文字列がすることです結果が次のようにスキップされる0の長さの文字列を生成しません。
1
2
3
45
なく
1
2
3
45
何の回避策や戦略0の長さのものも含め、すべての実際の部品を、入手するのにより適しでしょうか?可能であれば、strtok_sを再実装しないでください。
strtok()は入力文字列を変更するので悪いです。それ以外は、私はこれに対する答えが不思議です。 –
私の場合、strtokは望む文字列をすべて修正することができます。私はオリジナルを保持していて、コピーを処理しています。 – MPelletier
私はMicrosoftのstrtok_s.inlに入って、最初の「区切り文字ではない」文字に先頭の区切り文字がスキップされているため、実際にはこれが期待される動作であることがわかりました。うーん... – MPelletier