C语言 当字符串中有非英文字符时,Strlen函数给出错误的长度

bihw5rsg  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(154)

我有一个程序,它也接受非英语字符作为输入字段。因为我们使用strlen,当有一个非英语字符时,它在计算字符串的长度时没有给予预期的长度。对于输入nova,输出是4,而对于输入ñova,输出是5,而输出应该是4

  1. strlen("nova") = 4
  2. strlen("ñova") = 5
    在第二种情况下,我希望输出为4
a0zr77ik

a0zr77ik1#

请记住,strlen返回**字符串中char**的计数,这不一定与打印时可见字形的数量相同。
结果将取决于您系统的字符编码-使用ISO-8859.1,"ñova"{ 241, 111, 118, 97, 0}相同(长度4),但如果您使用UTF-8,则ñ是多字节字符,字符串表示为{195, 177, 111, 118, 97, 0}(长度5)。
如果你想计算代码点的数量,那么你可能想使用mbrlen()而不是strlen()。如果你想计算“用户”字符的数量,考虑到组合重音等等,那么你真的需要一个字符处理库,比如ICU。

相关问题