前の質問に続いて: man ページの免責事項にもかかわらず、`strchr` がマルチバイト文字で動作するように見えるのはなぜですか? strchr
、それは悪い選択だと思いました。
代わりに、単一の文字を探すために使用することを考えていstrstr
ます (マルチバイトではありませんchar
):
const char str[] = "This string contains é which is a multi-byte character";
char * pos = strstr(str, "é"); // 'é' = 0xC3A9: 2 bytes
printf("%s\n", pos);
出力:
マルチバイト文字であるé
これは、私のマルチバイト文字の最初のバイトの位置です。
アプリオリに、これは標準的な使用法ではありませんが、strstr
うまく機能しているようです。
この回避策は安全ですか? バグの原因となる副作用や特殊なケースについて考えていただけますか?
[編集]:型を使用したくないことwchar_t
、および処理する文字列が UTF-8 でエンコードされていることを正確に説明する必要があります (この選択について議論できることは承知していますが、これは無関係な議論です)