Question: I am trying to write a function that deletes a char c from a string src, and I am getting a seg fault when I try to run it. Here is the function.

```
void removeChar(char *src, char c){
  int i, j = 0;
  int size;
  char ch1;
  char str1[100];

  size = strlen(src);

  for (i = 0; i < size; i++){
    if (src[i] != c){
      ch1 = src[i];
      str1[j] = ch1;
      j++;
    }
  }
  str1[j] = '\0';
  src = str1;
}

```

And here is the main function where I am calling it.

```
int main(int argc, char **argv){
    char *str = "Hello, world!\0";
    printf("%s\n", removeChar(str, 'l'));
}

```

Answer: 
You have several bugs:

1. `char *str = "Hello, world!\0";`. Setting a non-constant pointer to point at a string literal is always wrong. Instead, declare the variable as `const char *str`. See this [FAQ](https://stackoverflow.com/questions/164194/why-do-i-get-a-segmentation-fault-when-writing-to-a-string).
2. removeChar doesn't return anything so you can't pass it as a parameter to be printed by printf. Your compiler really should have complained here. Chances are that your compiler is misconfigured or you you aren't using it with all warnings enabled.
3. `char str1[100];` You cannot use local variables and then try to pass the contents on to the caller. See this [FAQ](https://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope).
4. `src = str1;` doesn't do a thing, since `src` is only a local copy of the original pointer. With this assignment, you will not change the address of `str` in main. Which would have been a bug anyway, because of 3) above. You should rewrite your program so that is only uses `src` and no temporary array.
Not have enough reputation to comment. So, I had to write this on answer:

As **Vlad from Moscow** pointed out, 

```
`a local array do not exist after the function terminate`

```

I suggest you obey the same principle as of standard library functions. If you didn't already notice,none **string.h** function allocate memory for the user. You must allocate before call.

```
char *str = "Hello, world!\0";

```

The above code do not guarantee a modifiable memory. The compiler can set them in read only memory. You should use a array instead.