【问题标题】:What is the size of a Word in the context of the mbstowcs_s function SizeInWords parameter?在 mbstowcs_s 函数 SizeInWords 参数的上下文中,Word 的大小是多少?
【发布时间】:2026-01-18 16:05:02
【问题描述】:

在 Windows API 函数 mbstowcs_s 的上下文中,我很难确定 Word 的确切大小。这是来自MSDN的相关信息以及链接。

mbstowcs_s、_mbstowcs_s_l

将多字节字符序列转换为相应的宽字符序列。 mbstowcs 的版本,_mbstowcs_l 具有 CRT 中的安全功能中所述的安全增强功能。

参数

[out] pReturnValue - 转换的字符数。

[out] wcstr - 转换后的宽字符串的缓冲区地址。

[in] sizeInWords - wcstr 缓冲区的大小(以字为单位)。

[in] mbstr - 以空字符结尾的多字节字符序列的地址。

[in] count - 存储在 wcstr 缓冲区中的最大宽字符数,不包括终止的 null 或 _TRUNCATE。

这里是 MSDN 页面的链接:https://msdn.microsoft.com/en-us/library/eyktyxsx.aspx

有什么想法吗?

【问题讨论】:

  • 这是wcstr指向的缓冲区中wchar_ts的数量
  • @Praetorian 所以它本质上是缓冲区的长度(以宽字符为单位)......似乎 WORD 是描述参数的错误 word 选择......如果您将此作为答案发布,我会接受。我目前没有足够的声誉来对您的评论进行投票。
  • 我同意,更好的措辞会完全按照您所说的那样......缓冲区中的宽字符数。我怀疑这是 Windows API 术语泄漏到文档中的情况,因为 WinAPI 使用 WORD 作为 16 位无符号整数的 typedef,而 wchar_t 在 Windows 上也是 16 位的。无论如何,您已经有了答案(尽管我不同意他的第一句话,并且与回答实际问题有点离题),我不会再添加一个,因为我真的没有任何证据,如果您愿意的话,那我说的是对的。

标签: c++ windows api wchar tchar


【解决方案1】:

通常一个字表示 16 位。

为了确保分配一个 100 字节的缓冲区,用 0xff 填充它们。然后为 sizeInWords 传递 16 和至少 16 个字符的 mbstr。调用完成后,在调试器中检查 wcstr。如果我是对的,缓冲区的前 32 个字节将有字符值,其余的仍然是 0xff。 (当然这忽略了 wcstr 的某些值可能是 0xff)

【讨论】:

  • 感谢您的建议。我会试一试(或类似的东西),然后告诉你进展如何。