首页 > 解决方案 > 读取文件时cygwin转储堆栈

问题描述

我正在为 gcc 编译器使用 cygwin 64 位。我正在用这段代码尝试一些新的东西,我的阅读文件(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
...
...

如果有任何方法可以解决此错误并阅读整个文件,请提供帮助。谢谢你。

标签: cstack

解决方案


推荐阅读