在 C++ 中获取 `wchar_t*` 的长度
Posted
技术标签:
【中文标题】在 C++ 中获取 `wchar_t*` 的长度【英文标题】:get length of `wchar_t*` in c++ 【发布时间】:2011-02-20 16:04:04 【问题描述】:请问,如何在 c++ 中找出 wchar_t*
类型变量的长度?
下面的代码示例:
wchar_t* dimObjPrefix = L"retro_";
我想知道dimObjPrefix
包含多少个字符
【问题讨论】:
你是指单个字符还是字符串? 对不起,我应该说得更清楚。我想要字符数。 wcslen 似乎按照msdn.microsoft.com/en-us/library/78zh94ax(VS.71).aspxThanks tusbar 做我想做的事。 @Jacob:wchar_t
不是字符串,也没有长度。我假设你在问wchar_t*
。你知道,这些星号不仅仅是为了展示。如果不改变代码(和问题)的含义,就不能忽略它们
@jalf 谢谢和抱歉。我已编辑问题以包含我试图查找的代码示例,其中包括星号。
所以你想要wchar_t*
指向的内存块的长度。
【参考方案1】:
如果你想知道 wchar_t
字符串的大小 (wchar_t *
),你想使用wcslen(3)
:
size_t wcslen (const wchar_t *ws);
【讨论】:
也许是 sizeof (wchar_t),或者 wchar_t x 后跟 sizeof x? @Joseph,我花了很长时间才明白你的意思,我编辑了。谢谢你。很抱歉造成混乱。 关于 sizeof(),K&R 和 ANSI 基本原理都没有给出任何理由来解释括号的这种特殊性;有没有 SO 读者碰巧知道?sizeof(type)
与 sizeof expression
。现在如果e
是一个表达式,那么(e)
也是一个表达式,所以sizeof (expression)
也是隐式允许的。
使用wcslen
安全吗?【参考方案2】:
假设您想获取以空结尾的 C 样式字符串的长度,您有两种选择:
#include <cwchar>
并使用 std::wcslen (dimObjPrefix);
,
或#include <string>
并使用std::char_traits<wchar_t>::length (dimObjPrefix);
。
【讨论】:
以上是关于在 C++ 中获取 `wchar_t*` 的长度的主要内容,如果未能解决你的问题,请参考以下文章
C++如何把string类型的字符串负值给wchar_t?求完整实例。