在c ++中初始化指向字符串数组的指针

时间:2017-06-02 13:21:02

标签: c++ arrays string pointers initialization

当我写这段代码时,一切似乎都很完美

string *s;
s=new string("some_string");
*(s+1) = *s;

但当我更换" some_string"空白我的程序抛出segmetation错误。为什么会发生这种情况并且有办法解决它?

s=new string("");

2 个答案:

答案 0 :(得分:-1)

我认为问题是你的代码的最后一行,因为*(s + 1)应该在之前,当#34; some_string"之前产生错误或异常。被初始化为字符串。将指针初始化为* s

时,(s + 1)处不会出现任何字符串

答案 1 :(得分:-1)

程序的输出取决于编译器。

表达式*(s+1)的类型是字符串,因此您使用*(s+1) = * s执行的操作是:首先,您尝试将*(s+1)强制转换为字符串,然后尝试将该字符串分配给*s,它将调用该新转换字符串的复制构造函数。

当字符串不为空时,编译器可能会分配比存储*s数据所需内存更多的内存(“some_string”),并且字符串中的复制功能仅运行其实际数据(“ some_string“)这意味着它不会访问任何比*s分配的内存更多的内存。

但是当字符串为空时,编译器不会分配那么多内存,这会导致段错误。

因此,程序的结果可能取决于编译器,它们如何为std::basic_string保留数据以及它们如何存储数据。