为什么我的函数计算的字符比预期的多?
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/