将字符串写入char指针时的内存行为

时间:2014-09-24 03:32:13

标签: c string memory memory-management

因此,此代码可能会导致段错误,因为指针只被分配了第一个内存地址和可用范围之外的内存位置吗?或者它会像一组字符一样自行分配。

int main(){
  char *final;
  final = "This might cause a segfault. Especially if I am SUPPERRR LOOOOOOOOONNNNGG";

  return 0;
}

1 个答案:

答案 0 :(得分:1)

您对字符串文字的使用非常好。

来自C ++草案标准(N3337):

  

2.14.5字符串文字

     

8普通字符串文字和UTF-8字符串文字也称为窄字符串文字。窄字符串文字的类型为“ n const char”数组,其中 n 是下面定义的字符串大小,并且具有静态存储持续时间(3.7 )。

     

...

     

12是否所有字符串文字都是不同的(即存储在非重叠对象中)是实现定义的。尝试修改字符串文字的效果未定义。

  

3.7.1静态存储时间

     

1所有没有动态存储持续时间,没有线程存储持续时间且不是本地的变量都具有静态存储持续时间。这些实体的存储应持续到程序的持续时间

只要您不尝试通过指针更改字符串文字的内容,就没有问题。