Использует ли Re2 размер строки или нулевое завершение?

Название в значительной степени это. Если стандартная строка C ++ с символами UTF-8 не имеет нулевых байтов, заканчивается ли сканирование в конце строки, определенной ее размером? И наоборот, если строка имеет нулевой байт, сканирование останавливается на этом байте или продолжается до полной длины строки?
Я посмотрел на файл Re2.h, и он, похоже, не решает эту проблему.

0

Решение

std::string содержащий символы UTF-8 не может иметь 0-байтовую часть текста
(только как завершение), потому что UTF-8 никуда не допускает.

И учитывая, что вы используете что-то C ++ 11-совместимое, завершающий 0 гарантирован
(не имеет значения, если вы используете data() или же c_str(), А данные это исходные данные, так что …).
Увидеть http://en.cppreference.com/w/cpp/string/basic_string/data
или стандарт (21.4.7.1/1 и т. д.).
=> Обработка строки остановится на 0

0

Другие решения

Интерфейс для Re2, кажется, использует std::string, который почти
безусловно, означает, что он использует начало и конец
строка, и эти нулевые символы являются символами, как и любые другие.
(В конце концов, они определены в Unicode и в UTF-8.)
Конечно, ‘\ 0’ находится в символах управления категорией, поэтому он не будет
соответствует что-то вроде «\ pL» (что соответствует букве). Но это
должен соответствовать «\ pC». И, конечно же, '\u0000' и другие представления нулевого символа.

0

По вопросам рекламы [email protected]