刚才我正在尝试在我的 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));
}
想象一下我们print_length()
用msg = "привет"
(西里尔文,utf-8 编码)调用。我预计strlen()
应该返回 12(6 个字母 * 每个字母 2 个字节),并且
u8_strlen()
应该返回 6(只有 6 个字母)。
但我收到了奇怪的结果:
Default strlen: 12
U8 strlen: 12
在此之后,我尝试查找 u8_strlen 实现,并找到了以下代码:
size_t
u8_strlen (const uint8_t *s)
{
return strlen ((const char *) s);
}
我想知道,这是错误还是正确答案?如果正确,为什么?