You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何UTF-16编码下TCHAR指针地址差值不符合预期?

问题原因解析

首先明确C/C++中指针减法的核心规则:当两个指针指向同一个数组的元素时,减法结果是两者之间的元素个数差,而非原始字节地址差。

结合你的代码场景拆解:

  • 当TCHAR被解析为UTF-16编码时,每个TCHAR对应wchar_t类型,占用2字节。
  • 数组szStr的内容TEXT("C++中文你好")包含以下TCHAR元素(含字符串终止符):'C'、'+'、'+'、'中'、'文'、'你'、'好'、'\0',共8个元素,因此sizeof(szStr) = 8 × 2 = 16字节,与代码输出一致。
  • 你混淆了指针减法的结果含义:你预期的12是字节地址差(6个字符 × 2字节/字符),但代码中lp - szStr返回的是元素个数差。如果lp指向的是'好'这个元素,它与数组起始的元素个数差应为6,对应的字节地址差是12(6 × 2)。

至于你代码中输出的差值为4,可能是以下原因之一:

  • 字符计数错误:你可能误将'好'的位置数成了第5个元素(索引4),导致元素差为4,对应字节差8,但实际'好'是第7个元素(索引6)。
  • 打印格式问题:lp - szStr的结果是ptrdiff_t(有符号整数类型),使用%u(无符号整数格式符)打印可能导致输出异常,建议改用%td格式符打印ptrdiff_t类型的值。

内容的提问来源于stack exchange,提问作者SZYoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 04:07:45