-2

Why does this code crash? Is strcpy not being used properly?

strcpy code

Vlad from Moscow
  • 301,070
  • 26
  • 186
  • 335
  • 2
    [Please don't post images of code or error messages.](http://meta.stackoverflow.com/q/303812/1679849) – r3mainer Nov 25 '16 at 01:06
  • 1
    Possible duplicate of [Program aborts when using strcpy on a char pointer? (Works fine on char array)](http://stackoverflow.com/questions/5645949/program-aborts-when-using-strcpy-on-a-char-pointer-works-fine-on-char-array) – Crowman Nov 25 '16 at 01:08
  • 2
    Possible duplicate of [What is the difference between char s\[\] and char \*s in C?](http://stackoverflow.com/questions/1704407/what-is-the-difference-between-char-s-and-char-s-in-c) – r3mainer Nov 25 '16 at 01:09

1 Answers1

4

The variable msg1 points to the memory occupied by a string literal. String literals are not modifiable. Any attempt to modify a string literal results in undefined behavior.

From the C Standard (6.4.5 String literals)

  1. It is unspecified whether these arrays are distinct provided their elements > have the appropriate values. If the program attempts to modify such an array, the behavior is undefined.

Take into account that if you want to copy a string to a character array using the standard C function strcpy then the array has to have enough memory to accommodate the string including its terminating zero.

You can make your code valid by substituting the pointer for a character array. For example

char msg1[15] = "Hello World"; 
//...
strcpy( msg1, "Hello New York" ); 
Vlad from Moscow
  • 301,070
  • 26
  • 186
  • 335