On Sat, 25 Nov 1995, The Awakening wrote: > It never fails that when you edit a function on the fly before mailing > it, you'll screw up. Originally the cleanup function returned void and > just modified *dest. Well, in changing it to return a char * so you > could use it inside fprint and such, I forgot to make a couple of > necessary changes. So, here's the correct version (hehehe, maybe I > should practice playing with strings). > > /* strips \r's from line */ > char *cleanup(char *dest, const char *src) > { > if (!dest || !src) > return NULL; > > char *temp = &dest[0]; > int i = 0, length = strlen(src); > > for (; *src && (i < length); i++, src++) > if (*src != '\r') > *(temp++) = *src; > > // terminate it properly > *temp = '\0'; > > return dest; > } > > > This should work correctly now (=. > i've been a lurker in this group for about a year an a-half and never posted (i read this group mostly for ideas), but being a software engineer for 15 years specializing in low level C and assembly embedded systems, sloppy code will sometimes iritate me. :) you don't need to return anything... do the string in place: [........................ snip .........................] void remove_CRs(char *string) { register char *ptr; ptr = string; do { if (*string != '\r') *ptr++ == *string; ++string; } while(*string); } [......................... snip .........................] this does it all, including placing the endmark on the string. it's also compact and FAST. caveat: untested, but guaranteed to work. :) Lauren ps. if you want to make it more generic, pass the character. ie: void remove_a_char(char *string, char char_to_remove), and replace the '\r' with char_to_remove.
This archive was generated by hypermail 2b30 : 12/07/00 PST