Files
sics/strrepl.c
koennecke 91d4af0541 - Adapted indenation to new agreed upon system
- Added support for second generation scriptcontext based counter
2009-02-13 09:00:03 +00:00

73 lines
1.8 KiB
C

/*
--------------------------------------------------------------------
Module: REPLACE.C
Author: Gilles Kohl
Started: 09.06.1992 12:16:47
Modified: 09.06.1992 12:41:41
Subject: Replace one string by another in a given buffer.
This code is public domain. Use freely.
--------------------------------------------------------------------
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
* StrReplace: Replace OldStr by NewStr in string Str.
*
* Str should have enough allocated space for the replacement, no check
* is made for this. Str and OldStr/NewStr should not overlap.
* The empty string ("") is found at the beginning of every string.
*
* Returns: pointer to first location behind where NewStr was inserted
* or NULL if OldStr was not found.
* This is useful for multiple replacements, see example in main() below
* (be careful not to replace the empty string this way !)
*/
char *StrReplace(char *Str, char *OldStr, char *NewStr)
{
int OldLen, NewLen;
char *p, *q;
if (NULL == (p = strstr(Str, OldStr)))
return p;
OldLen = strlen(OldStr);
NewLen = strlen(NewStr);
memmove(q = p + NewLen, p + OldLen, strlen(p + OldLen) + 1);
memcpy(p, NewStr, NewLen);
return q;
}
#ifdef TEST
/*
* Test main().
* Given two arguments, replaces the first arg. in the lines read from
* stdin by the second one.
* Example invocation:
* replace printf puts <replace.c
* will replace all printf's by puts in replace's source.
*
*/
int main(int argc, char *argv[])
{
char buf[200];
char *Start;
if (argc != 3)
exit(1);
/* Repeat until all occurences replaced */
while (NULL != (Start = gets(buf))) {
while (NULL != (Start = StrReplace(Start, argv[1], argv[2])));
printf("%s\n", buf);
}
return 0;
}
#endif