strtokに渡して値を印刷しようとすると、 str="insert 111,name,123456789"
の文字列がある場合、それらは逆に出力されます。たとえば :printf()の値としてstrtok()を逆に返します。
char* token=strtok(str," ");
printf("%s %s %s %s\n",token,strtok(NULL,","),strtok(NULL,","),strtok(NULL,","));
output: insert 1234567 name 1111
:insert 111 name 123456789
ですが、なぜでしょうか?どのようにこれを修正することができますか?
引数の評価順序が定義されていません。引数に副作用( 'strtok'を呼び出すようなもの)のコードを使用しないでください。 –
おそらく、*シーケンスポイント*エラーのために、*不確定にシーケンスされた*結果が発生している可能性があります。パラメータ評価の順番には保証がありません。 ** C11 Standard Sect。 6.5.2.2(10)** –
どのように修正できますか?慣用的な 'while(token!= NULL)'ループを使用してください。 'strtok'への呼び出しの1つが' NULL'を返すべきであれば、もう一度呼び出すべきではないので、あなたのバージョンもひどいです。入力データに頼らないでください。 –