1

Why changing string characters causes segmentation fault(core dumped):

char *str = "string";
str[0] = 'S'; //segmentation fault(core dumped) 
1

2 Answers 2

3

The solution is simple, declare your string in the following way instead

  char str[] = "string";

The reason why you should do this is because of the Undefined behavior. Creating a string with pointers will make your string locate at the read only memory part, so you cannot modify it, whereas another way will also make a copy of your string on the stack. Also check What is the difference between char s[] and char *s in C?

Sign up to request clarification or add additional context in comments.

2 Comments

You cannot say both "undefined behavior" and "will make" (a definitive statement). The point of "undefined behavior" is that anything can happen, and nothing is required to happen. It is likely that your string will be located in read-only memory, but not required.
@abelenky Thanks for pointing out, I'm not a native english speaker, and the undefined behavior says that the one like the question is one of the undefined behavior.
2

char *str = "string"; points to a read-only part of memory and because of that the string can't be changed.

You need to declare an array instead of a pointer which points to an array if you want to change the array like this

char str[] = "string";

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.