>我在代码的一部分上遇到了分段错误,我已经查看并修复了我看到的大部分错误,但我找不到所有的分段错误。
这段代码只是检查向量的标记中是否有单引号,并将单引号字符串组合成一个标记。
void file_parser::check_quote(vector<string> tokens)
{
bool has_quote = false;
string tmpstr;
unsigned int FirstQuote = 0;
unsigned int SecondQuote;
string tmp;
string tmpstr2;
for (unsigned int i = 0; i <= tokens.size() - 1; i++) {
tmp = tokens[i].c_str();
for (unsigned int m = 0; m <= tmp.size() - 1; m++) {
if (tmp[m] == ''') {
has_quote = true;
FirstQuote = m;
}
if (has_quote && m != FirstQuote && tmp[m] == ''') {
SecondQuote = m;
for (unsigned int k = FirstQuote; k <= SecondQuote; k++) {
tmpstr += tokens[k];
}
tokens.insert(tokens.begin() + FirstQuote, tmpstr);
for (unsigned int j = FirstQuote + 1; j <= tokens.size() - 1; j++) {
for (unsigned int l = SecondQuote + 1; l <= tokens.size() - 1; l++) {
tmpstr2 = tokens[SecondQuote + 1];
tokens.insert(tokens.begin() + j, tmpstr2);
}
}
int test = tokens.size() - SecondQuote + 1;
while (test > 0) {
tokens.erase(tokens.end() - 1);
}
}
}
}
}
问题出在 k 的 for 循环中。 您想在引号之间(和包含)从 tmp 复制字符,但您停止引用 tmp,并返回到标记。