2014-11-23 105 views
0

因为C中的一个字符串可以包含几个字节的Unicode字符,其中一个字节可能是一个终止的\ 0字符,所以我不认为strlen在计算这样的字符串中有多少字节时效果不佳。如何计算unicode字符超过1个字节的字符串长度?

如何正确计算这种字符串的字节长度?我不是为它分配内存的人,而是我在库dirent.h中使用struct dirent的属性char d_name [256]。除了复制整个256字节外,还有什么方法可以查看字符串名称的长度吗?如果我不能复制256字节呢?

+1

正如我在[您的上一个问题](http://stackoverflow.com/a/27087022/1009479)中所说的,UTF-8不是问题,那么您使用的是什么编码? – 2014-11-23 09:19:40

+0

@余浩我想我在这里说得更清楚一些,当时我说我从哪里得到字符串。 – 2014-11-23 09:34:07

+1

你误会Unicode和unicode编码,如UTF-8,UTF-16和UTF-32。阅读[Joel on Software的 绝对最小每个软件开发人员绝对肯定必须知道Unicode和字符集(没有借口!)](http://www.joelonsoftware.com/articles/Unicode.html)和[Unicode,UTF -8和字符编码:每个开发人员应该知道的内容)(http://www.teknically-speaking.com/2014/02/unicode-utf-8-and-character-encodings_23.html)。没有Unicode字符串,但是使用某些Unicode编码编码的字符串 – 2014-11-23 09:48:46

回答

3

unicode是什么意思?如果是UTF-8(dirent.h是POSIX API的一部分,所以它应该是UTF-8),它的中间不能包含。 strlen会根据你的需要来做。如果你使用UTF-16的一些非标准版本的dirent(也许是一些奇怪的Windows端口),你可以使用适当的宽字符string functions

相关问题