Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
436 views
in Technique[技术] by (71.8m points)

pointers - C runtime error (undefined behaviour) for performing ++*(p++) on string literal char *p = "abcd"

Question 1:

int main()
{
  char *p="abcd";
  printf("%c",*(p++));
  return 0;
}  // Here it will print a

Question 2:

int main()
{
  char *p="abcd";
  printf("%c",++*(p++));//why it is showing error over here
  return 0;
} // Here it shows runtime error.

Can someone please explain to me why the statement ++*(p++) causes a runtime error.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
char *p="abcd";

"abcd" is a string literal and string literals are unmodifiable in C. Attempting to modify a string literal invokes undefined behavior.

Use a modifiable array initialized by a string literal to fix your issue:

char p[] ="abcd";

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...