1

我正在尝试分离用 ' ' 填充的字符串并将其存储在数组中。为此,我编写了代码,

string* componentsOfStringSeperatedBystring(string originalString, string stringCompare){

string *arryOfStrings=NULL;

string *tempArrayString = NULL;
for (int i=0; i<originalString.length(); i++) {


    size_t position = originalString.find(stringCompare);
    cout << "\nposition" <<position;

    if (position == originalString.npos) {

        break;
    }
    size_t subStringLength = originalString.length() - position;

    cout << "\nsubStringLength" <<subStringLength;
    string subString = originalString.substr(0,position);

    cout << "\nsubString" <<subString;

    tempArrayString = (string*)realloc(arryOfStrings, (i+1)*sizeof(string));

    cout << "\n i \t" <<i;
    if (tempArrayString != NULL) {

        arryOfStrings = tempArrayString;
        arryOfStrings[i] = subString;
    }


    cout << "\narryOfStrings" <<arryOfStrings;
    originalString = originalString.substr(position+1,subStringLength);
}

return arryOfStrings;
}

我在“arryOfStrings[i] = subString;”行上崩溃了,如果我只是先分配足够的空间,然后不重新分配,我就不会崩溃。

4

2 回答 2

1

您需要使用newwith std::stringnot c 内存分配函数。
他们不调用std::string类的构造函数,不像new. std::string并且需要调用类的构造函数以进行正确的初始化。

老实说,您根本不应该使用std::string *。这样一来,您就失去了char *从一开始就避免使用而获得的所有优势。只需使用:

std::vector<std::string>
于 2012-12-25T11:01:32.877 回答
1

不要在 C++ 风格的对象上使用 C 风格的内存管理。要么完全采用 C 风格(使用以 null 结尾的char*字符串),要么完全采用 C++ 风格(使用std::vector<std::string>)。

于 2012-12-25T11:03:21.907 回答