将字符串文字传递给函数是不允许修改的

时间:2014-05-22 15:32:54

标签: c++ c

计划1:

 void function(char arr[])
 {
   arr[0] = 'X';
   printf("%s",arr);
 }       

 int main()
 {
   function("MyString");  
 }

输出:分段错误

计划2:

   int main()
   {
    char arr[] = "MyString";
    arr[0] = 'X';
    printf("%s",arr);
   }

输出:XyString

程序1和程序2有什么区别?在prog1中,字符串值(不是通过引用)传递给数组,因此它应该复制到数组并允许修改它?但它正在抛出细分错误。在prog2中成功允许更改arr []。为什么在prog1中它不起作用?

1 个答案:

答案 0 :(得分:2)

  1. Prog 1:您正在传递一个字符串文字,该文字作为const char*发送给该函数。您无法更改const对象。
  2. Prog 2:您使用的是非const字符数组,可以修改。
  3. 来自你的评论:

      

    在prog1中,字符串值(不是引用)也传递给数组,因此应该复制到数组并允许修改它吗?

    <强>错误即可。在程序1中,字符串文字放在内存中的某个位置(可能在只读内存中,因为它是常量),然后发送指向该内存位置的const char*字符数组不作为参数发送,只发送第一个字符的地址。

相关问题