This is my theory. It crashes because the strings you are using are consts and are probably stored in read only memory. When you do *b=*a you are simply trying to copy the first character of array a, to the first character of array b. If a is pointing to read only memory, the prog will core.
Here's some code to backup this. example 1 is your code that will crash, example 2 uses malloc to obtain memory for the second array (and therefore it won't be in read only memory).
Code:
#include <stdio.h>
int main(void)
{
char *a="abcd";
char *b="efgh";
printf("Variable a/Char 1 is %c\n", *a);
printf("Variable b/Char 1 is %c\n", *b);
printf("Variable a as a string is %s\n", a);
printf("Variable b as a string is %s\n", b);
*b=*a;
printf ("After assignment...\n");
printf("Variable a/Char 1 is %c\n", *a);
printf("Variable b/Char 1 is %c\n", *b);
printf("Variable a as a string is %s\n", a);
printf("Variable b as a string is %s\n", b);
return(0);
}
/* Program output
Variable a/Char 1 is a
Variable b/Char 1 is e
Variable a as a string is abcd
Variable b as a string is efgh
Segmentation fault (core dumped)
*/
Code:
#include <stdio.h>
int main(void)
{
char *a="abcd";
char *b=malloc(10);
strcpy (b, "efgh");
printf("Variable a/Char 1 is %c\n", *a);
printf("Variable b/Char 1 is %c\n", *b);
printf("Variable a as a string is %s\n", a);
printf("Variable b as a string is %s\n", b);
*b=*a;
printf ("After assignment...\n");
printf("Variable a/Char 1 is %c\n", *a);
printf("Variable b/Char 1 is %c\n", *b);
printf("Variable a as a string is %s\n", a);
printf("Variable b as a string is %s\n", b);
return(0);
}
/* Program output
Variable a/Char 1 is a
Variable b/Char 1 is e
Variable a as a string is abcd
Variable b as a string is efgh
After assignment...
Variable a/Char 1 is a
Variable b/Char 1 is a
Variable a as a string is abcd
Variable b as a string is afgh
*/