0

gperf 信息页面声称,如果您指定,-l

输入文件中的关键字可能包含 NUL 字节,以字符串语法写成 \000 或 \x00,而 gperf 生成的代码会将 NUL 视为任何其他字节

但是,当我通过以下方式运行此输入文件时gperf -L C++ -l

foo
\000bar\000
\x00baz\x00
bat

我得到:

  <snip>
  static const char * wordlist[] =
    {
      "", "", "",
      "foo",
      "", "", "", "",
      "bat",
      "", "",
      "\\x00baz\\x00",
      "", "", "", "",
      "\\000bar\\000"
    };
  <snip>

看起来它将\000and\x00视为文字值而不是空字节。

如何在我的 gperf 字符串中正确使用指定空字节?

4

1 回答 1

1

您可以在“关键字条目格式”部分找到更精确的输入语法文档:

它可以以两种方式给出:作为一个简单的名称,即不带引号的字符串,或者作为用双引号括起来的字符串,在 C 语法中,可能带有反斜杠转义,如 \" 或 \234 或 \xa8。

在 gperf 的测试套件中,您可以找到一个示例

"\x00\x45\x00\x6E\x00\x67\x00\x6C\x00\x69\x00\x73\x00\x68",    "English",    "en_GB.UTF-8"
于 2020-04-10T09:25:38.593 回答