2014-09-24 98 views
0

因此,此代码是否可能会导致段错误,因为指针仅在第一个内存地址和内存位置可能超出可用范围之后被分配了第一个内存地址和内存位置?或者它会像一系列字符一样自行分配它。将字符串写入字符指针时的内存行为

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

    return 0; 
} 

回答

1

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

从C++标准草案(N3337):

2.14.5字符串文字

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

...

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

3.7.1静态存储

1不具备动态存储时间,不具有线程存储时限,而不是本地的所有变量都静储存期限。这些实体的存储应持续在程序期间

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