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
  • 278,309
  • 50
  • 514
  • 539
2

Attempting to modify a string literal causes undefined behaviour.

Carl Norum
  • 219,201
  • 40
  • 422
  • 469