在GNU C ++中声明一个字符串数组

时间:2011-10-21 03:33:34

标签: c++ arrays initialization segmentation-fault

对我而言,它似乎应该如此简单,但我只是觉得我错过了一些东西。

我在头文件中有一个私有变量_stoplist当我在头文件中声明它时,代码看起来就像这样。

private:
    std::string _stoplist[];

但是当我后来在我的功能中我决定访问它时,它就会出现任何错误。

_stoplist[_length];
//cout << _length << prints 104 (its a valid int and everything)
_stoplist[0] = "b";

使用段错误在std :: string.assign()代码中崩溃。我有一种直觉,我错过了一些明显的东西,但我还没有发现什么。

提前致谢!

编辑:好的,谢谢你的帮助。对于其他可能阅读此内容的人,我建议使用下面的答案之一,因为这是明智的方法。在我的情况下,虽然我需要动态分配而不使用使用向量我只使用了以下代码。

private:
    std::string *_stoplist;

然后在我的cpp文件中

_stoplist = new string[_length];

是的,事实证明它真的很简单,我只是在看那个部分。

2 个答案:

答案 0 :(得分:2)

你得到一个数组越界错误,因为_stoplist没有大小。您应该给它一个大小,并且只访问该范围内的元素,例如:

private:
    std::string _stoplist[100];

现在你应该能够通过_stoplist [99]索引_stoplist [0]。然而,更好的解决方案可能是使用std :: vector,因为它更安全。

private:
    std::vector< std::string > _stoplist;

然后,您可以使用其成员函数(如resize())将其增长到您需要的任何大小。

答案 1 :(得分:1)

那是因为声明为std::string[]的变量基本上只是一个指针。要使用它,您需要为它分配内存。如果要为其分配固定内存,请尝试将其声明为例如而是std::string _stoplist[5];