strstr がマルチバイト文字で誤認識する場合の対処




strstrのマルチバイト検索


C言語の strstr 関数は文字列から指定した文字列を検索しアドレスを返す関数です。
しかし8ビット文字時代の古い関数互換であり、日本語などマルチバイトの場合は誤認識する場合があります。
例えば $ で検索した場合、偶然日本語に2バイト文字でどちらかの8バイトに $ と同じ文字コードが含まれるとヒットと判定されてしまいます。

以下がその失敗例です。
【失敗例】

strstr(path2, "$"));


【失敗例2】
wcschrなど、その他マルチバイトやワイド文字に対応した関数がありますが、そもそも元の文字が対応していないのでそのまま使用すると正常にヒットしません。

(char*)(wcschr((wchar_t*)path2, "$"));


解決方法



以下のように_mbsstr などマルチバイトに対応した関数を使用します。


char *retpoint = (char*)(_mbsstr((unsigned char*)path, (unsigned char const*)"$"));


これでポインタretpoint に正常に値が設定されるはずです。



キーワード:strstr

Windows トラブルシューティング一覧に戻る


(ご注意事項)本ページは2017年に独自に調査して記載した事項です。本ページには誤りがある可能性はあります。また今後仕様が変更となる可能性があります。
本ページにより発生したいかなる損失も誰も補償しません。あくまでも自己責任で参考にしてください。