首页 > 解决方案 > 在 C++ 中比较来自向量的字符串时出现分段错误

问题描述

我的代码如下所示。单词是从两个文件中读入的,需要检查是否在两个文件中都出现了单词。在它与两者中的第一个单词匹配并将其添加到新向量后,我不断收到段错误。我之前添加了打印语句,它在遇到 seg 错误之前一直使用 int n 参数在循环中运行。我对 C++ 比较陌生,因此首选最基本的帮助方式。

    #include <iostream>
    #include <string>
    #include <fstream>
    #include <locale>
    #include <vector>

    using namespace std;

    vector<string> wordOne;
    vector<string> wordTwo;

    fileOne.open(argv[2]);
    fileTwo.open(argv[3]);
    while (fileOne >> wordsFirstFile) {
        wordOne.push_back(wordsFirstFile);
     }
    while (fileTwo >> wordsSecondFile) {
        wordTwo.push_back(wordsSecondFile);
     }
    fileOne.close();
    fileTwo.close();
    int sizeOneWord = wordOne.size();
    int sizeTwoWord = wordTwo.size();
    vector<string> printWords;
    int m = 0;
    int n = 0;
    for (m = 0; m <= sizeOneWord; m++) {
        for (n = 0; n <= sizeTwoWord; n++) {
             if (wordOne[m] == wordTwo[n]) {
                 printWords.push_back(wordOne[m]);
             }
        }
    }

标签: c++vectorsegmentation-faultstring-comparison

解决方案


假设sizeOneWord是一个。这意味着只有一个合法索引进入wordOne. 但是您的循环将循环两次,一次 withm == 0和一次 with m == 1。因此,如果向量中有一个元素,您将尝试访问两个元素。您需要将两个<=比较更改为<.


推荐阅读