我正在尝试单独填充''的字符串并将其存储在数组中。为此,我编写了代码,
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;”,如果我先分配足够的空间,然后再重新分配,我就不会崩溃。
答案 0 :(得分:1)
您需要new
使用std::string
而不是内存分配功能
与std::string
不同,它们不会为new
类调用构造函数。并且需要调用std::string
类的构造函数进行正确的初始化。
说实话,你根本不应该使用std::string *
。这样做会失去在避免使用char *
时获得的所有优势。只需使用:
std::vector<std::string>
答案 1 :(得分:1)
不要在C ++风格的对象上使用C风格的内存管理。要么完全采用C风格(使用以null结尾的char*
字符串),要么完全采用C ++风格(使用std::vector<std::string>
)。