gpt4 book ai didi

c++ - _tcslen 和 _tcsclen 有什么区别?

转载 作者:搜寻专家 更新时间:2023-10-31 01:29:17 26 4
gpt4 key购买 nike

我开发了一个必须兼容不同字符集编码的应用程序。为此,我总是使用 TCHAR* 而不是 char* 来定义字符串。因此,我使用 _tcslen 来获取我的字符串的大小。

今天,我在公司的版本控制系统上看到,我的一位同事将我编写 _tcslen 的行编辑为使用 _tcsclen

我找到的唯一链接谁在谈论这个功能的特殊性是this one并且它没有解释这些功能之间的区别。

谁能给我解释一下 _tcslen_tcsclen 之间的区别?

最佳答案

_t 前缀表示这些是映射到不同实现的文本处理函数(实际上是宏),具体取决于您是否针对“Unicode”(实际上是 UTF-16)进行编译。

当你为 Unicode 编译时(设置了 _UNICODE),它们映射到同一个函数,wcslen,它返回宽字符串的长度(两个-byte) 个字符。

当您不为 Unicode 编译时(设置了 _MBCS),它们映射到不同的函数:

  • _tcslen 映射到 strlen,它返回以 字节 为单位的字符串长度。这是为了让您可以分配正确大小的缓冲区。
  • _tcsclen 映射到 _mbslen,其文档相当稀疏。我猜测,但是_tcsclen 中的c 是用来表示字符

字符和字节之间的区别在于,在多字节编码中,一个特定字符可以占用一到三个字节。因此:_tcsclen (_mbslen) 告诉你字符串中有多少个字符,这对渲染很有用,而 _tcslen (strlen ) 告诉您字符串中有多少字节,这是您需要进行内存分配的。

一般来说,如果您主要在 Windows 上工作,您只需针对 Unicode 进行编译就可以了。如果您正在与另一个系统通信(读取/写入文件、网络消息等),您只需要处理其他字符编码,并且通常会与 UTF-8 相互转换。

请注意,当 Windows SDK 文档提到“多字节”时,它指的是旧的多字节编码,例如 Shift-JIS,而不是 UTF-8(也是多字节编码) -字节编码)。

关于c++ - _tcslen 和 _tcsclen 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50209198/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com