Właśnie teraz próbuję użyć libunistring w moim programie c. Muszę przetworzyć ciąg znaków UTF-8, a dla niego użyłem funkcji u8_strlen() z biblioteki libunistring.
przykład Kod:libunistring u8_strlen() równa się strlen()?
void print_length(uint8_t *msg) {
printf("Default strlen: %d\n", strlen((char *)msg));
printf("U8 strlen: %d\n", u8_strlen(msg));
}
Wystarczy wyobrazić sobie, że nazywamy print_length()
z msg = "привет"
(cyrylica, kodowanie UTF-8). Oczekiwalem, ze strlen()
powinien zwrocic 12 (6 liter * 2 bajty na liter), a u8_strlen()
powinien zwrocic 6 (tylko 6 liter).
Ale otrzymaliśmy wyniki ciekawy:
Default strlen: 12
U8 strlen: 12
Po tym ja próbowałem do wyszukiwania u8_strlen realizację, i znaleźć ten kod:
size_t
u8_strlen (const uint8_t *s)
{
return strlen ((const char *) s);
}
Zastanawiam się, czy to bug czy to jest poprawna odpowiedź? Jeśli to prawda, dlaczego?