Я использую cygwin 64 bit для компилятора g cc. Я пытаюсь что-то новое с этим кодом, и мой файл для чтения (covid-19.csv) имеет около 12600 строк. После примерно 2250 строк возвращается Cygwin,
0 [main] myalgo 872 cygwin_exception::open_stackdumpfile: Dumping stack trace to myalgo.exe.stackdump
И ulimit -s
дает только 2032 . Да, я знаю, что это легко сделать с помощью функций c, но я хотел попробовать без использования некоторых функций.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argCount, char *argv[])
{
char fileName[] = "covid-19.csv";
int getFields(int, int, char*);
char* heading;
char* subHeading;
char charTaken;
int count;
int arg1 = 1;
int arg2 = 1;
char buildStr[25];
int argument1Col = 0;
int argument2Col = 0;
if(argCount != 3)
{
printf("invalid amount of arguments\n datalyze [arg1] [arg2]\ndateRep day month year cases deaths countriesAndTerritories geoId countryterritoryCode popData2018 continentExp");
return(-1);
}
heading = argv[1];
subHeading = argv[2];
FILE *openFile = fopen(fileName, "r");
if(openFile == NULL)
{
printf("No file can be found %s.", fileName);
return(-1);
}
while(1)
{
charTaken = fgetc(openFile);
if(charTaken == ',')
{
buildStr[count] = '\0';
if(strcmp(buildStr, heading) == 0)
{
argument1Col = arg1;
}
if(strcmp(buildStr, subHeading) == 0)
{
argument2Col = arg2;
}
arg1++;
arg2++;
count = 0;
continue;
}
if(charTaken == '\n')
{
break;
}
buildStr[count] = charTaken;
count++;
}
fclose(openFile);
if(argument1Col == 0 || argument2Col == 0)
{
printf("Entered Fields are wrong.\n");
return(-1);
}
if(argument1Col > argument2Col)
{
argument1Col = argument1Col + argument2Col;
argument2Col = argument1Col - argument2Col;
argument1Col = argument1Col - argument2Col;
}
getFields(argument1Col, argument2Col, fileName);
}
int getFields(int field1, int field2, char* fileName)
{
char c;
char buildWord[25];
int count = 0;
int commaCount = 0;
FILE *openFile = fopen(fileName, "r");
if(openFile == NULL)
{
printf("No file can be found %s.", fileName);
return(-1);
}
printf("\n");
while(1)
{
c = fgetc(openFile);
if(c == ',')
{
commaCount++;
if(commaCount == field1)
{
buildWord[count] = '\0';
printf("%s ", buildWord);
}
else if(commaCount == field2)
{
buildWord[count] = '\0';
printf("%s", buildWord);
}
count = 0;
continue;
}
if(c == '\n')
{
count = 0;
commaCount = 0;
printf("\n");
}
if(c == EOF) break;
buildWord[count] = c;
count++;
}
fclose(openFile);
}
Файл covid-19 выглядит следующим образом.
dateRep,day,month,year,cases,deaths,countriesAndTerritories,geoId,countryterritoryCode,popData2018,continentExp
23/04/2020,23,4,2020,84,4,Afghanistan,AF,AFG,37172386,Asia
22/04/2020,22,4,2020,61,1,Afghanistan,AF,AFG,37172386,Asia
21/04/2020,21,4,2020,35,2,Afghanistan,AF,AFG,37172386,Asia
20/04/2020,20,4,2020,88,3,Afghanistan,AF,AFG,37172386,Asia
...
...
Если есть способ решить эту ошибку и прочитать весь файл, пожалуйста, помогите. Спасибо.