如何获得正确的字符串长度?

时间:2019-05-25 22:42:11

标签: c

为什么我的函数计算的字符数超出预期?

int countLength(char* buffer){
    int cnt = 0;
    for (int i=0; buffer[i] != '\n' && buffer[i] != '\0'; i++){
        cnt++;
    }
    return cnt;
}

例如,如果我通过“Seráchuva?Serágente?”作为输入,它给出25而不是23。为什么呢?

1 个答案:

答案 0 :(得分:2)

该代码为您提供了正确的答案,即使它不是您期望的答案。

问题是您希望它计数字素(例如á,而它计数字节/代码单位(á由utf-8正常形式的两个代码单位组成)。

第一个近似值是通过跳过连续字节(> 0x7f和<0xc0)来计数代码点。要真正计数字素,您必须使用具有所有字符信息(如international components for unicode (ICU))的适当的unicode库,并接受其决定。

阅读字符集,尤其是编码。

顺便说一句,cnt始终镜像i。尽管优化的编译器会删除此重复项,但它甚至不应该存在。