程序在不应该的情况下继续抛出seg故障。我有数组和向量,并尝试了两种选择。似乎总是把seg故障抛在3的数组/向量的第三个值上。之后还有另外一个函数,当被注释掉时,它会再多出几次。但结果是一样的,它仍然存在缺陷。
char bits[3];//vector<char> bits(3,'0');
vector<string> inputs;
string temp;
for(int x = 0;!i.eof();x++)
{
getline(i, temp);
inputs.push_back(temp);
}
for(int x = 0; x < inputs.size();x++)
{
cout << endl << inputs[x];
}
for(int x = 0; x < 3;x++)
{
cout << endl << bits[x];
}
for(int cursor = 0;cursor< inputs.size();cursor++)
{
cout << endl << "bitstogoin " << cursor;
cout << endl << inputs.size();
bits[0]=inputs[cursor][0];
cout << endl << "got1 " << bits[0];
bits[1]=inputs[cursor][1];
cout << endl << "got2 " << bits[1];
bits[2]=inputs[cursor][2]; //seg faults on this line.
cout << endl << "bitsin";
for(int t = 0; t < 3;t++)
{
cout << bits[t];
}
通过输入文件提供的命令如下所示: 100 10110101 101 11001011 111 110 000 111 110等...
答案 0 :(得分:1)
注意:这可能与您的段错误无关,但仍应解决。
以下输入循环有两个问题。首先,x
毫无意义,因为你永远不会对x
的值做任何事情。其次,eof()
上的循环很少是正确的(请参阅:Testing stream.good() or !stream.eof() reads last line twice)。
for(int x = 0;!i.eof();x++)
{
getline(i, temp);
inputs.push_back(temp);
}
请尝试以下方法:
while (getline(i, temp))
{
inputs.push_back(temp);
}
答案 1 :(得分:0)
在您的代码中:
vector<string> inputs;
string temp;
for(int x = 0;!i.eof();x++)
{
getline(i, temp);
inputs.push_back(temp);
}
您读入字符串并将它们放入矢量中。
问问自己这个?每个字符串的长度是多少?
致电时
bits[2]=inputs[cursor][2];
您正在访问该向量中字符串的第3个字符。在此声明之前试试这个:
if (inputs[cursor].size() < 3)
cout << "String is less than 3!" << endl;
如果您的程序打印出该调试行,那么您就知道自己遇到了麻烦。
事实上,在尝试访问字符串中的字符之前,你并没有真正做任何事情来检查字符串的长度。