Название в значительной степени это. Если стандартная строка C++ с символами UTF-8 не имеет нулевых байтов, то сканирование заканчивается в конце строки, определенной ее размером? И наоборот, если строка имеет нулевой байт, сканирование останавливается в этом байте или продолжается до полной длины строки? Я смотрю файл Re2.h, и, похоже, это не проблема.
std::string
содержащая символы UTF-8, не может содержать 0-байтов в тексте
(только как завершение), потому что UTF-8 не позволяет 0.
И учитывая, что вы используете что-то совместимое с С++ 11, гарантируется завершение 0
(неважно, используете ли вы data()
или c_str()
. И данные являются исходными данными, поэтому...).
См. Http://en.cppreference.com/w/cpp/string/basic_string/data
или стандарта (21.4.7.1/1 и т.д.).
=> Обработка строки будет остановлена на 0
std::string
или в <algorithm>
не останавливаются на 0.
Интерфейс Re2, похоже, использует std::string
, что почти наверняка означает, что оно использует начало и конец строки, а нулевые символы - такие же символы, как и любые другие. (В конце концов, они определены в Unicode и UTF-8.) Конечно, "\ 0" находится в контрольных символах категории, поэтому он не будет соответствовать чему-то вроде "\ pL" (который соответствует букве). Но он должен соответствовать "\ pC". И, конечно, '\u0000'
и другие представления нулевого символа.