c - 读取文件时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
...
...
如果有任何方法可以解决此错误并阅读整个文件,请提供帮助。谢谢你。
解决方案
推荐阅读
- sql - 如何将 NVarchar 转换为十进制?
- json - 多个 SELECT 语句到单个 JSON
- android - 将 APP_STL 从 gnustl_static 切换到 c++_shared 后出现“未定义的引用...”错误
- python - Numpy - 如何将向量索引数组转换为掩码?
- azure-logic-apps - 是否可以编辑逻辑应用文件系统或 SFTP 触发条件以根据文件名或扩展名触发逻辑应用?
- node.js - 在 MongoDB 中保持并发读取操作的一致性
- javascript - 从 node.js 服务器运行时,Bootstrap 4 Carousel 不起作用
- reactjs - 我可以使用什么方法来更新重复操作的状态?
- c++ - 编写一个简单的 C++ 线程安全日志库,如何使线程安全 << 运算符?
- c++ - 我怎么能处理一个窗口的消息?