strstrU

Ищет нечётко определённые конструкции (аналогично strstrU) и производит из замену (модификацию данных).

char* strrepU(
    char **str,
    const char *strCS,
    const char *repCS,
    size_t *SbsLen=0,
    char **repstr=0,
    size_t *SrLen=0
);

Параметры

str
[вх/вых]
Указатель на анализируемый/модифицируемый текст, должен быть завершающейся нулём строкой.
Если задано с модификацией (repstr = 0) - следует убедиться что память имеет права RW и выделена malloc()-ом т.к. функция использует библиотеку Си для работы с памятью.
strCS
[вх] Запрос для поиска (аналогичен strCharSet)
repCS
[вх] Шаблон для замены. Формат аналогичен strCS.
Если для какой-либо переменной соответствие в strCS не найдено - она рассматривается как *
SbsLen
[вых] Не обязателен. Принимает длину найденного или изменённого участка.
repstr
[вых] Не обязателен. Принимает указатель на переменную, принимающую адрес итоговой строки с заменами. Если задан - str остаётся неизменной.
Возвращённый указатель должен быть освобождён пользователем вызовом free() стандартной библиотеки Си.
SrLen
[вых] Не обязателен. Если repstr используется - принимает длину строки данных в repstr, без учёта завершающего нуля, иначе содержит длинну найденного участка.

Возвращаемые значения

Указатель на начало первой найденной конструкции в массиве string
0 если ничего не найдено или произошла ошибка

Функция помещает код ошибки в глобальную Си переменную errno:
0  = Нет ошибок
7  = Слишком много подстановочных конструкций! число ? * и переменных не должно превышать 254 штуки!
8  = Не удалось интерпретировать значение strCS, repCS (запроса для поиска и замены)
11 = Недопустимое имя переменной (см. strCS, repCS)
12 = Для выполнения недостаточно памяти (ОС отказала в выделении ОЗУ)
22 = Неправильные и/или  недопустимые значения аргументов функции.

Заметки

В любом случае стоит учитывать что как str так и repstr могут содержать нулевые символы, в связи с чем точную длину данных в них можно определить на основании значения SrLen (для repstr) или суммы исходного размера str и разницы SbsLen и SrLen (новый размер = OldszStr + (SbsLen - SrLen). Действительный размер выделенной памяти можно получить вызвав _msize()

Внимание!

Требует линковки с msvcrt! Имеет проблемы с современными компиляторами от Microsoft.

Быстрая справка

ОС Требует наличие стандартной библиотеки Си
DLL 2fapShare.dll
Библиотека 2fapShare.lib
Заголовок usearch.h

Смотри также

strstrU, strnstr, memstr