Как использовать нулевые байты в 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"