c - 我怎样才能得到正确的字符串长度?

标签 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。这是为什么?

最佳答案

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

问题是您希望它计算字素(如 á),而它计算字节/代码单元(á 由 utf- 中的两个代码单元组成8 范式组成)。

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

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

顺便说一句,cnt 总是镜像 i。虽然优化编译器会删除这种重复,但它甚至不应该存在。

关于c - 我怎样才能得到正确的字符串长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56309286/

相关文章:

c - c中scanf(%100s)是什么意思

C 指向数组最后一个元素的指针

c - 我们如何使用可变变量作为开关盒标签

c - 递归 C 中的阶乘 : type issue

c - 按列打印 1 到 100

c - 需要在 linux C 中获取星期六的日期

c - 为什么在按值传递的参数的头文件中的函数声明中不需要 const?

c - strtok(NULL, "\n") 做什么?

c - 二叉树递归函数

c - ANSI 游标索引是否可移植