Hi,
Your program has a few bugs (beside the style problems): 1. It just does not work when there is more than one occurence of s2 in s1, because you are just moving s1[c1+factor] to s1[c1], and the matching of s1+c1 with s2 cannot be performed at the same time. 2. s1[c1+factor] can reach beyond the end of s1. 3. You should not alter a string defined with double-quotes, this is the reason of sigsegv, when you run it, that portion of memory is read-only, while in gdb this is not the case, you should first copy it to a buffer, then call squeezechars2 on it. Fixed code attached (with a linear algorithm). behdad On Sun, 25 Nov 2001, Eugene Romm wrote: > Hello. > > I've written a procedure that's supposed to remove all occurances of > string2 from string1 (parameters). > For reasons I do not understand, the program compiles but segfaults when > run from the command prompt, but silently executes without a warning > when run under GDB. Attached is the program. Segfault occurs on line 29, > as far as I can tell. > -- Behdad 4 Azar 1380, 2001 Nov 25 [Finger for Geek Code] -- Attached file included as plaintext by Listar -- -- File: s.c #include <stdlib.h> #include <string.h> void squeezechar2(char *st, char *subst); int main() { char p[100]; strcpy(p, "abcdeFghijklmnopqrsdeFtuvwxyZ"); squeezechar2(p,"deF"); printf(p); return 0; } void squeezechar2(char *s1, char *s2) { int c1,c2; int s2length; int factor; for (s2length=0;s2[s2length]!='\0';s2length++); // find out s2length for (c1=c2=factor=0; s1[c1] != '\0' ; c1++) { // loop to end of string s1[c1-factor]=s1[c1]; if (s1[c1]==s2[c2]) c2++; else c2=0; if (c2 == s2length) { c2=0; factor+=s2length; } } s1[c1-factor] = 0; } ================================================================= To unsubscribe, send mail to [EMAIL PROTECTED] with the word "unsubscribe" in the message body, e.g., run the command echo unsubscribe | mail [EMAIL PROTECTED]