2016-11-25 28 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");