【问题标题】:Details on the Microsoft multi-string format有关 Microsoft 多字符串格式的详细信息
【发布时间】:2010-08-26 15:13:38
【问题描述】:

some of its API functionMicrosoft 中使用“多字符串”格式来指定字符串列表。

据我了解,多字符串是连接以空字符结尾的字符串的以空字符结尾的缓冲区。但这也可以解释为字符串列表,由一个空字符分隔并以两个空字符结尾。

这里有一个例子。由以下项目组成的列表:

"apple", "banana", "orange"

变成:

apple\0banana\0orange\0\0

但现在我想知道:

空列表如何表示?

会是:

\0

或者:

\0\0

我没有找到准确的文档来说明这一点。有什么线索吗?

【问题讨论】:

  • “字符串列表”中的最后一个字符串是零长度字符串。一个 \0 就足以终止。
  • 想知道这如何与 UTF-8 及其多字节字符一起工作?
  • Windows API 不支持 UTF-8 :-( 但如果支持,什么都不会改变,因为 UTF-8 多字节字符从不包含 \0。

标签: c++ c string msdn


【解决方案1】:

\0

【讨论】:

  • 我敢打赌,这是您有史以来最短的答案;)不过,它完美地回答了我的问题。谢谢。
  • 我是一个沉默寡言的人。如果你能说“它完美地回答了我的问题。谢谢。”只需单击复选标记...
  • 那么在这样的列表中不可能有一个空字符串(“”)?
  • 不,不是,就像你不能在 C 字符串中包含 \0
【解决方案2】:

应该是\0

Raymond Chen describes how this works on his blog:字符串列表以空字符串结尾。如果列表中的第一个字符串为空,则列表本身为空。

【讨论】:

  • 是的,这是一篇很棒的文章 ;-)
【解决方案3】:

如果你正在使用这些,很多年前,我写了一个 STL 风格的迭代器来处理它们:

http://noveltheory.com/iterators/Iterator_N3.htm

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多