使用带有指向字符

时间:2016-11-25 01:05:38

标签: c arrays string strcpy string-literals

为什么这段代码会崩溃? strcpy没有正确使用吗?

strcpy code

1 个答案:

答案 0 :(得分:4)

变量msg1指向字符串文字占用的内存。字符串文字不可修改。任何修改字符串文字的尝试都会导致未定义的行为。

来自C标准(6.4.5字符串文字)

  
      
  1. 未指明这些数组是否是不同的,只要它们的元素>有适当的价值观。 如果程序试图修改这样的   数组,行为未定义。
  2.   

考虑到如果要使用标准C函数strcpy将字符串复制到字符数组,则数组必须有足够的内存来容纳字符串,包括其终止零。

您可以通过将指针替换为字符数组来使代码有效。例如

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