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

0

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

  • 0
    Строки c ++ не используют нулевой завершающий байт, как строки c-style. Смотрите: stackoverflow.com/questions/11752705/…
  • 0
    Пожалуйста, покажите некоторый пример исходного кода для решения вашей проблемы.
Показать ещё 6 комментариев
Теги:
re2

2 ответа

0

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

  • 1
    Ваше первое предложение неверно, согласно стандарту Unicode. Unicode определяет кодовую точку 0x0000 как управляющий NULL, а формат кодирования UTF-8 определяет, как она отформатирована в UTF-8 (как один байт 0x00).
  • 0
    И, конечно же, функции в std::string или в <algorithm> не останавливаются на 0.
Показать ещё 2 комментария
0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню