2016-11-25 69 views
-2

爲什麼此代碼會崩潰? strcpy沒有正確使用?strcpy與指向字符的指針的使用

strcpy code

+2

[請不要張貼代碼或錯誤消息的圖像。(http://meta.stackoverflow.com/q/303812/1679849) –

+1

的[程序使用的strcpy何時中止可能的複製一個字符指針? (在char數組上工作正常)](http://stackoverflow.com/questions/5645949/program-aborts-when-using-strcpy-on-a-char-pointer-works-fine-on-char-array) –

+2

[在C中char s \ [\]和char \ * s有什麼區別?](http://stackoverflow.com/questions/1704407/what-is-the-difference-between-char-s -and炭-S-在-c)的 –

回答

4

可變msg1指向由字符串文字佔據的存儲器。字符串文字不可修改。任何修改字符串文字的嘗試都會導致未定義的行爲。

從C標準(6.4.5字符串文本)

  • 它是未指定的這些陣列是否是不同的條件是它們的元素>有適當的值。 如果程序試圖修改這樣一個 數組,行爲是未定義的。
  • 要考慮到,如果你想將一個字符串複製到使用標準的C函數strcpy字符數組則數組必須有足夠的內存來容納包括其終止零的字符串。

    通過將指針替換爲字符數組,您可以使代碼有效。例如

    char msg1[15] = "Hello World"; 
    //... 
    strcpy(msg1, "Hello New York");