今、C プログラムで libunistring を使用しようとしています。UTF-8 文字列を処理する必要があり、そのために libunistring ライブラリの u8_strlen() 関数を使用しました。
コード例:
void print_length(uint8_t *msg) {
printf("Default strlen: %d\n", strlen((char *)msg));
printf("U8 strlen: %d\n", u8_strlen(msg));
}
(キリル文字、utf-8 エンコーディング) で呼び出すprint_length()
と想像してみてください。12 (6 文字 * 1 文字あたり 2 バイト) が返され、
6 (6 文字だけ) が返されるはずですmsg = "привет"
。strlen()
u8_strlen()
しかし、興味深い結果が得られました。
Default strlen: 12
U8 strlen: 12
この後、u8_strlen の実現を調べようとしたところ、次のコードが見つかりました。
size_t
u8_strlen (const uint8_t *s)
{
return strlen ((const char *) s);
}
私は疑問に思っています、それはバグですか、それとも正解ですか?正しいとすれば、なぜですか?