我很好奇strlen如何计算C中多个字节的unicode字符。
它是否计算每个字节或字符(因为它们可以包含几个字节),直到第一个' \ 0'?
答案 0 :(得分:7)
strlen()
计算遇到\0
之前的字节数。这适用于所有字符串。
对于Unicode,请注意strlen()
的返回值可能会受到空终止符以外的有效字符中可能存在的\0
字节的影响。如果使用UTF-8,那很好,因为除了0
之外没有有效字符可以有\0
字节,但对于其他编码可能不是这样。
答案 1 :(得分:3)
strlen
仅适用于字符串,即char
的空终止数组。字符串内允许的所有多字节编码都具有不包含内部空字节的属性,因此strlen
和其他str
函数(如strcat
)可以正常工作。
如果通过“unicode”表示wchar_t
的数组,那么这可以包含空字节,但是这里再次没有问题,wchar_t
元素本身都不会为空。并且您不应该将str
函数应用于此类数组,而不是为它们定义它们。