strtok()はオブジェクト指向を使ってない古い設計だから仕方ないね
しかしそれを糞と呼ぶにはそれ相応の理由が必要

内部状態を持つ関数オブジェクトも普通に組めばスレッドセーフにならないんだから
strtok()もスレッドセーフでない事を気をつけて使えば何ら問題ない

ただオブジェクト指向でないので、複数の文字列を混合して使おうとすれば
たちまち動作が狂うので、それを糞と呼ぶのなら仕方ないが、それはどちらかというと
古い設計だから