【发布时间】:2021-05-03 23:59:47
【问题描述】:
Windows 编程。按照MS page 的教程进行操作,然后到达底部的这一行:
TextOutW(hdc, 5, 5, greeting, wcslen(greeting));
变量greeting 是一个TCHAR 数组。 VS2019 在上一行报告了一个警告(C4267),从 wcslen() 返回的
我找不到另一个可能需要
顺便说一句,当我在寻找答案时,我在某处读到 strlen() 在 64 位编程中已被弃用,尽管我不记得在哪里,我可能错了。
有解决办法吗?有什么建议吗?
【问题讨论】:
-
除非你有数十亿个字符的字符串,否则这只是一个警告。您可以尝试通过强制转换来抑制它。
-
strlen()只能处理长度约为 21 亿个字符的字符串,如果您的size_t如此有限的话。在通常具有 4GB 内存限制的 32 位架构上,这并不是真正的问题。看起来像strlen()returnssize_t应该根据架构调整大小,不像int,所以这里没有问题因为长度限制而被弃用,但strnlen_s更安全。 -
值得注意的是,从性能角度来看,在 >1GB 的字符串上调用
strlen()将会非常痛苦。 -
@tad 您已经确定了不是的问题。这是一个 64 位构建,其中
wcslen返回一个 64 位宽的size_t。完全没有问题。它将该值传递给TextOutW,在此发生截断为int。 -
@IInspectable 我试图解释为什么有人可能听说
strlen()被“弃用”。
标签: c++ windows type-conversion desktop-application