Название в значительной степени это. Если стандартная строка C ++ с символами UTF-8 не имеет нулевых байтов, заканчивается ли сканирование в конце строки, определенной ее размером? И наоборот, если строка имеет нулевой байт, сканирование останавливается на этом байте или продолжается до полной длины строки?
Я посмотрел на файл Re2.h, и он, похоже, не решает эту проблему.
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
Интерфейс для Re2, кажется, использует std::string
, который почти
безусловно, означает, что он использует начало и конец
строка, и эти нулевые символы являются символами, как и любые другие.
(В конце концов, они определены в Unicode и в UTF-8.)
Конечно, ‘\ 0’ находится в символах управления категорией, поэтому он не будет
соответствует что-то вроде «\ pL» (что соответствует букве). Но это
должен соответствовать «\ pC». И, конечно же, '\u0000'
и другие представления нулевого символа.