从文本文件中读取行时的字符串分段错误

时间:2014-12-08 20:58:29

标签: c++ string file text segmentation-fault

我在尝试读取文本文件的行并将它们放入程序中的相应字符串时遇到此seg-fault。

if(infile.is_open()){
    //calculating the number of lines
    while(getline(infile, line)){
        numberoflines++;
    }
    //Find start of the file and start reading
    infile.clear();
    infile.seekg(0, ios::beg);

    if(!infile.eof()){
        //Allocate an array of strings, each string contains a line from the input file
        string STRING[numberoflines];
        int i = 0;

        while(getline(infile, STRING[i])){

            cout<<STRING[i]<<endl;
            i++;
        }
    }

    infile.close();
}

程序实际打印出每一行,但在提供较大的文本文件时以seg-fault结束。

1 个答案:

答案 0 :(得分:0)

您不应该两次读取文件(一次是行数,一次是行本身)。正如其他人所建议的那样,使用std :: vector非常适合。这是一个例子:

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

int main( int argc, char ** argv )
{
    if( argc != 2 )
        return 1;
    std::vector< std::string > lines;
    std::ifstream infile( argv[1] );
    if( infile.is_open() )
    {
        std::string buffer;
        while( std::getline( infile, buffer ).good() ) 
            lines.push_back( buffer );
        inflie.close();
    }
    size_t numberoflines = lines.size();

    std::ostream_iterator< std::string > out( std::cout, "\n" );
    std::copy( lines.begin(), lines.end(), out );
}