This works and produces bbcd as I'd expect.
#include <stdio.h>
int main(void) {
char string[] = "abcd";
string[0] = string[1];
printf("%s\n", string);
}
This is a bus error.
#include <stdio.h>
int main(void) {
char *string = "abcd";
string[0] = string[1];
printf("%s\n", string);
}
Why?
Valgrind says:
==9909== Process terminating with default action of signal 10 (SIGBUS)
==9909== Non-existent physical address at address 0x100000FA2
==9909== at 0x100000F65: main (test.c:6)