Как использовать нулевые байты в gperf?

На информационных страницах 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>

Похоже, он лечит \000 а также \x00 как буквальные значения, а не нулевые байты.

Как я могу правильно указать нулевые байты в моих строках gperf?

1 ответ

Решение

Более точную документацию по синтаксису ввода вы найдете в разделе "Формат ввода ключевых слов":

Его можно задать двумя способами: как простое имя, т. Е. Без окружающих строковых кавычек, или как строку, заключенную в двойные кавычки, в синтаксисе C, возможно, с экранированием обратной косой черты, например \"или \234 или \xa8.

И в наборе тестов gperf вы найдете пример:

"\x00\x45\x00\x6E\x00\x67\x00\x6C\x00\x69\x00\x73\x00\x68",    "English",    "en_GB.UTF-8"
Другие вопросы по тегам