char * strip_invalid_chars(char *string) { char *c = string; char *c2 = string; char *last_non_space = NULL; /* c is source, c2 is target */ for(; c && *c; c++) switch (*c) { case '\f': case '\n': break; case ' ': *c2++ = (*(c + 1) != ' ') ? *c : '\0'; break; default: *c2++ = *c; last_non_space = c2; break; } *c2 = '\0'; if(last_non_space) *last_non_space = '\0'; return string; }