Proprio ora sto cercando di usare libunistring nel mio programma c. Devo elaborare la stringa UTF-8, e per essa ho usato la funzione u8_strlen() dalla libreria libunistring.
Esempio di codice:libunistring u8_strlen() equivale a strlen()?
void print_length(uint8_t *msg) {
printf("Default strlen: %d\n", strlen((char *)msg));
printf("U8 strlen: %d\n", u8_strlen(msg));
}
Provate a immaginare che noi chiamiamo print_length()
con msg = "привет"
(, codifica UTF-8 cirillico). Mi aspettavo che strlen()
restituisse 12 (6 lettere * 2 byte per lettera), e u8_strlen()
dovrebbe restituire 6 (solo 6 lettere).
Ma ho ricevuto i risultati curiosi:
Default strlen: 12
U8 strlen: 12
Dopo questo ho cercato di ricercare realizzazione u8_strlen, e abbiamo trovato questo codice:
size_t
u8_strlen (const uint8_t *s)
{
return strlen ((const char *) s);
}
mi chiedo, è esso bug o è la risposta corretta? Se è corretto, perché?