В приведенной ниже программе отображается ошибка: «ошибка сегментации (сброс ядра)».
Он должен отображать запись плоского файла с использованием вектора, читать запись каждой строки, получать поля и возвращать их обратно в вектор r_record. И вдавить обратно в стол.
//.. includes
#define LIMIT 72
#define FIELD 25
using namespace std;
typedef vector <string> record_t;
typedef vector <record_t> table_t;
char line[FIELD];
string s_field;
table_t table;
record_t r_record;
void getField(char s[LIMIT])
{
char field[LIMIT];
int i=0;
r_record.clear();
while(s[i] != '\n')
{
if (s[i] != '\t' )
{
field[i] = s[i];
//*s_field = *s_field+1;
}
i++;
}
s_field = field;
r_record.push_back(s_field);
}
void getLine(FILE *fp)
{
char c;
int j=0;
table.clear();
l1:while ( (c = getc(fp)) != EOF )
{
if( c != '\n' )
{
line[j] = c;
}
j++;
}
getField(line);
table.push_back(r_record);
if(c != EOF)
goto l1;
cout<<table.size();
}
int main()
{
double total_time;
clock_t start, end;
start = clock();//time count starts
FILE *f1;
f1 = fopen("somesamplefile.txt","r+");
getLine(f1);
end = clock();//time count stops
total_time = ((double) (end - start)) / CLOCKS_PER_SEC; //calulate total time
printf("\nTime taken to print %f\n", total_time);
return 0;
}
if ( f1 == NULL ) exit(EXIT_FAILURE);
перед выполнениемgetLine(f1);
- person M.M   schedule 29.12.2014char c;
должно бытьint c;
иначе цикл EOF не работает - person M.M   schedule 29.12.2014getLine
вызывает переполнение буфера, его необходимо остановить до достижения LIMIT.getField
также необходимо остановить до достижения LIMIT. Вы можете избежать этих проблем, используяstd::string
иstd::getline
. - person M.M   schedule 29.12.2014