我有一个程序,它也接受非英语字符作为输入字段。因为我们使用strlen,当有一个非英语字符时,它在计算字符串的长度时没有给予预期的长度。对于输入nova,输出是4,而对于输入ñova,输出是5,而输出应该是4。
strlen
nova
4
ñova
5
strlen("nova")
strlen("ñova")
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。
char
"ñova"
{ 241, 111, 118, 97, 0}
ñ
{195, 177, 111, 118, 97, 0}
mbrlen()
strlen()
1条答案
按热度按时间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。