Когда я использую функцию StrSplit с постоянной строкой, она отлично работает. но когда я читаю строку из файла, а затем использую ее как строку для функции StrSplit, моя программа вылетает из строя. ниже приведен код и снимок экрана ошибки.После компиляции кода он сбой (не удалось получить почему)
string Read_from_file(){
//load the text file and put it into a single string:
std::ifstream in("test.txt");
std::stringstream buffer;
buffer << in.rdbuf();
std::string test = buffer.str();
std::cout << test << std::endl << std::endl;
return test;
}
// split the given string according to give delimeters
vector<string> &StrSplit(string inStr, string sepStr, vector<string> &outStrVec) {
char * comp;
char * buffer = new char[ strlen(inStr.c_str()) ];
strcpy(buffer, inStr.c_str());
comp = strtok (buffer, sepStr.c_str());
while (comp != NULL) {
outStrVec.push_back(comp);
comp = strtok (NULL, sepStr.c_str());
}
delete[] comp;
delete[] buffer;
return outStrVec;
}
vector<string> StrSplit(string inStr, string sepStr) {
vector<string> outStrVec;
return StrSplit(inStr, sepStr, outStrVec);
![enter image description here][2]}
int main() {
Read_from_file();
string fileinput = Read_from_file();
vector<string> v;
string inStr = fileinput;
v = StrSplit(inStr, "|#$ *@.&\"!^01");
for (unsigned int i = 0; i < v.size(); ++i) {
cout << v[i] << '\n';
}
}
Например, если я использую inStr = "bob010101 ******* was * .... there"; v = StrSplit (inStr, "| # $ * @. & \"!^01 "); на ouptut я получу (Боб был там), но когда я использую строку, которую я проанализировал из файла, я получил ошибку, показанную на image –
Я не хочу начинать указывать проблемы, потому что вам нужно пойти (забрать хорошую книгу) (http://stackoverflow.com/q/388242/1171191). Но когда вы создаете 'buffer' из' inStr', вы не оставляете место для 'NUL' в конце. – BoBTFish
@BoBTFish не мог понять, что вы имели в виду, объясните, пожалуйста, немного больше, или это будет потрясающе, если вы покажете его в коде. заранее –