7

前の質問に続いて: 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 でエンコードされていることを正確に説明する必要があります (この選択について議論できることは承知していますが、これは無関係な議論です)

4

2 に答える 2