0

The following code produces a segmentation fault on my system. I can't figure out why. Any help would be appreciated.

#include<stdio.h>
int main() {
    char * a = "abc";
    *a = 'c';
    printf("%c\n", *a);
    return 0;
}

2 Answers2

6

The standard explicitly lists this as undefined behavior in §J.2:

— The program attempts to modify a string literal (6.4.5)

If you want to copy it into a local array, do:

char a[] = "abc";

a is an array on the stack, and you can modify it freely.

Matthew Flaschen
  • 268,153
  • 48
  • 509
  • 534
2

Attempting to modify a string literal causes undefined behaviour.

Carl Norum
  • 210,715
  • 34
  • 410
  • 462