For starters to remove a character from a string there is no need to create dynamically a character array and then copy this array into the original string.
Either you should write a function that indeed removes the specified character from a string or a function that creates a new string based on the source string excluding the specified character.
It is just a bad design that only confuses users. That is the function is too complicated and uses redundant functions like malloc, strlen, strcmp and strcpy. And in fact it has a side effect that is not obvious. Moreover there is used incorrect type int for the length of a string instead of the type size_t.
As for your function implementation then you forgot to append the terminating zero '\0' to the string built in the dynamically allocated array.
If you indeed want to remove a character from a string then the function can look as it is shown in the demonstrative program.
#include <stdio.h> char * remove_char(char *s, char c) { char *p = s; while (*p && *p != c) ++p; for ( char *q = p; *p++; ) { if (*p != c) *q++ = *p; } return s; } int main( void ) { char str[] = "Input string"; puts(str); puts(remove_char(str, 'g')); return 0; }
The program output is
Input string Input strin
If you are learning the function malloc and want to use it you in any case should try to implement a correct design.
To use malloc you could write a function that creates a new string based on the source string excluding the specified character. For example
#include <stdio.h> #include <stdlib.h> char * remove_copy_char(const char *s, char c) { size_t n = 0; for (const char *p = s; *p; ++p) { if (*p != c) ++n; } char *result = malloc(n + 1); if (result) { char *q = result; for (; *s; ++s) { if (*s != c) *q++ = *s; } *q = '\0'; } return result; } int main( void ) { char *str = "Input string"; puts(str); char *p = remove_copy_char(str, 'g'); if ( p ) puts(p ); free(p); return 0; }
The program output will be the same as above.
Input string Input strin
Pay attention to the function declaration
char * remove_copy_char(const char *s, char c); ^^^^^^
In this case the source string can be a string literal.
char *str = "Input string";
if(strcmp(copy, str) != 0)block. Please add them. (You can edit your question - see the tiny gray word "edit" under the blue "c" in a box? That's a button. Yes, really.)NUL(\0).}perhaps I put it in the wrong place.