Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.04 KB | None | 0 0
  1.  
  2. char *replace(const char *src, const char *from, const char *to)
  3. {
  4.    size_t size    = strlen(src) + 1;
  5.    size_t fromlen = strlen(from);
  6.    size_t tolen   = strlen(to);
  7.    char *value = malloc(size);
  8.    char *dst = value;
  9.    if ( value != NULL )
  10.    {
  11.       for ( ;; )
  12.       {
  13.          const char *match = strstr(src, from);
  14.          if ( match != NULL )
  15.          {
  16.             size_t count = match - src;
  17.             char *temp;
  18.             size += tolen - fromlen;
  19.             temp = realloc(value, size);
  20.             if ( temp == NULL )
  21.             {
  22.                free(value);
  23.                return NULL;
  24.             }
  25.             dst = temp + (dst - value);
  26.             value = temp;
  27.             memmove(dst, src, count);
  28.             src += count;
  29.             dst += count;
  30.             memmove(dst, to, tolen);
  31.             src += fromlen;
  32.             dst += tolen;
  33.          }
  34.          else /* No match found. */
  35.          {
  36.             strcpy(dst, src);
  37.             break;
  38.          }
  39.       }
  40.    }
  41.    return value;
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement