ちょうど私はCプログラムでlibunistringを使用しようとしています。 私はUTF-8文字列を処理しましたが、libunistringライブラリのu8_strlen()関数を使用しました。
コード例:libunistring u8_strlen()は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エンコーディング)msg = "привет"
でprint_length()
を呼び出すことを想像してみてください。 は12(6文字* 1文字あたり2バイト)を返し、 u8_strlen()
は6(ちょうど6文字)を返すはずです。
しかし、私は好奇心旺盛な結果受け取った:、
size_t
u8_strlen (const uint8_t *s)
{
return strlen ((const char *) s);
}
私は思ったんだけど、それはバグですか:私はu8_strlen実現を検索しようとしたが、このコードを見つけたんだ。この後
Default strlen: 12
U8 strlen: 12
をそれは正解ですか?それが正しければ、なぜですか?