이 코드에 문제가 있습니다. g ++로 컴파일 한 후 a.out을 실행하면 세그먼트 화 오류가 발생하고 "여기"가 표시되지 않습니다. 코드는 꽤 짧습니다.세그먼트 오류 main() 전에
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <sstream>
using namespace std;
bool inWords(vector<string> words, string str);
int main()
{
cout << "here";
vector<string> words;
string str;
istringstream iss;
ifstream file("data.txt", ifstream::in);
// read in words
for(int i = 0; file >> str; /*no i++*/)
{
if(str[str.length() - 1] == '.')
str.erase(str.length()-1);
// if word has a period at the end, erase it
if(!inWords(words, str))
{
// if word is not in vector words, add it
words.push_back(str);
i++;
}
}
// output each word
for (vector<string>::size_type i = 0; i < words.size(); i++)
cout << words[i];
// return to beginning of file
file.clear();
file.seekg(0, ios::beg);
// read in sentences
// to be implemented
file.close();
return 0;
}
bool inWords(vector<string> words, string str)
{
for(int i = 0; !words[i].empty(); i++)
if(words[i] == str) { return true; }
return false;
}
내가 아는 한 아무 문제가 없어야합니다. data.txt는 파일과 동일한 디렉토리에 있으며 명령 행에서 인수를받지 못합니다. 누구든지 도와 줄 수 있습니까?
아무것도 표시되지 않는다고해서 프로그램이'main()'이전에 segfaults라는 것을 의미하지는 않습니다. 아마 출력 버퍼를 비우지 않고 프로그램을 종료했다는 것을 의미합니다. – Brian
네 말이 맞아. 나는 "여기"다음에 추가하고 끝내므로 지금 나는 진짜 근원을 찾아야 만한다. 감사합니다 – Lucas
을 sidenote로 사용 : 항상 I/O 작업이 성공했는지 여부를 확인하십시오. –