Написал функцию замены подстроки в строке. На на русских (в кодировке UTF8) символах падает при попытке free'шнуть результирующую строку. На английских символах все норм.
char * strrep(char ** line, char * pattern, char * replacer)
{
if (!(*line) || (!pattern) || (!replacer))
return NULL;
if (strstr(replacer, pattern))
return NULL;
uint32_t lpat = strlen(pattern);
uint32_t lrep = strlen(replacer);
char * pcharpat;
while ((pcharpat = strstr(*line, pattern)) != NULL)
{
uint32_t ppat = pcharpat - *line;
uint32_t llin = strlen(*line);
char * attempt = realloc(*line, llin + (lrep - lpat));
if (!attempt)
return NULL;
*line = attempt;
memmove(*line + ppat + lrep, *line + ppat + lpat,
llin - ppat - lpat + 1);
memcpy(*line + ppat, replacer, lrep);
}
return *line;
}
- Тестовая строка для *line: %CAPTION%
- Тестовая строка для pattern: %CAPTION%
- Тестовая строка для replace: Ð\232нопка