【问题标题】:Weird symbol in wchar_t char arraywchar_t 字符数组中的奇怪符号
【发布时间】:2013-01-24 13:20:15
【问题描述】:

是什么导致这个奇怪的符号出现在数组的开头?

它出现在 Unicode 字符和多字节字符集。它阻止了我将它与另一个数组进行比较。

编辑:在研究“比较 Unicode 字符串 c++”时,Google 什么也没给我。

我还查看了 wchar_ts 出现的历史上奇怪的符号,它们也很稀疏。

编辑:Visual Studio 2010,Windows 7,代码无法显示。它是结构化存储文件流名称的一部分。

我已经提供了我所能提供的所有信息。我正在打开并枚举一个结构化存储文件,一旦枚举了该流,wchar_t 数组就是 pwcsName 值。我正在寻找一种将其与“SummaryInformation”进行比较的方法。那个符号挡住了。

我想到的一个可能的解决方案是从数组中的第二个字符开始创建一个子字符串,但我不确定如何去做。

【问题讨论】:

  • 一些关于操作系统、编译器的小提示,甚至发布一些代码可能只是有点帮助。
  • 该符号表示您当前字体中没有符号的字符。您需要找到它的字符代码(数字)。
  • 如果你向我们展示一个 char* 变量并询问第一个字符来自哪里,这真的不可能回答这个问题。你从哪里得到这个字符串?
  • "代码无法显示" == "问题无法回答"
  • @TWshal :我的 cmets 试图让您向我们提供足够的信息,以使问题可以解决和/或对其他人有用。 Stackoverflow 就是“展示你的代码”。如果你真的根本做不到,那么任何人都很难帮助你。在这种情况下,(假设我在下面发布的答案中有 any 有效性)只需提及您正在调用的返回奇怪名称的 Windows 函数的特定名称会有所帮助。

标签: c++ wchar-t


【解决方案1】:

该符号用于显示在所选字体中没有字形的代码点。例如,代码点可能是不可打印的,或者它可能是您的调试器正在使用的字体中未包含的语言中的字符。

从这里无法说出代码点实际上是什么。您将需要编写一些诊断代码,或在调试器中检查以找出它的真正含义。

为了解决问题,您需要追踪这些字符串的来源。然后看看你做错了什么。它看起来更像是代码中的一个错误。换句话说,也许字符串实际上比您的代码认为的晚一个字符开始。

【讨论】:

  • 实际值有一个十六进制值0x0005,我该如何调查这个值?
  • 嗯,你从哪里得到这个值的?
  • 结构化存储文件流名。
  • 嗯,那就是结构化存储文件流名有问题。否则你的代码会踩到它。谁能说?
  • @couling 这不是这里发生的事情。
【解决方案2】:

在此处阅读有关 Windows 结构化存储的信息:

http://msdn.microsoft.com/en-gb/library/windows/desktop/aa380020(v=vs.85).aspx

特别是name参数:-

指向以空字符结尾的宽字符 Unicode 字符串的指针 包含新创建的流的名称。名字可以用 稍后打开或重新打开流。姓名不得超过 31 字符长度,不包括字符串终止符。 000 通过 01f 字符,作为第一个字符 流/存储名称,保留供 OLE 使用。 这是一个复合词 文件限制,而不是结构化存储限制。

所以它是某种形式的保留 OLE 名称。不过,我对结构化存储的了解还不够,无法为您提供更多帮助。

【讨论】:

猜你喜欢
  • 2015-08-07
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
  • 2011-12-23
  • 1970-01-01
  • 2017-05-16
  • 2013-08-16
相关资源
最近更新 更多