|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
代码如下:
- #include <iostream>
- #include <fstream>
- #include <sstream>
- #include <vector>
- #define MAXROW 878504
- #define STRINGSIZE 512
- #define ifDebug 1
- class vegatable
- {
- public:
- std::string SingleItemCodeTemp;
- std::string SingleItemName;
- std::string ClassificationCode;
- std::string ClassificationName;
- std::string SaleDateTemp;
- unsigned long int SaleDate;
- unsigned long int SingleItemCode;
- };
- int ReadCSV(const char *FileName, char ***temp, unsigned int ColumnNumber, unsigned int RowNumber)
- {
- FILE *fp;
- if ((fp = fopen(FileName, "r")) == NULL)
- {
- return false;
- }
- for (int i = 0; i < RowNumber; i++)//按行读取
- {
- for (int j = 0; j < ColumnNumber; j++)//按列读取
- {
- for (int k = 0; k < STRINGSIZE; k++)//存入缓冲区
- {
- char chartemp = fgetc(fp);
- temp[i][j][k] = ' ';
- if (chartemp == ',')//','说明下一列了
- {
- break;
- }
- if (chartemp == '\n')
- {
- goto NextRow;
- }
- }
- }
- NextRow:
- continue;
- }
- #if ifDebug
- #endif
- return true;
- }
- int main(void)
- {
- //先分别读取附件1 附件2, 把他们的数据先存放在一个数组里边
- char temp1[4][252][STRINGSIZE];//列标 行标 字符缓冲区(没办法, string把控不住)
- if (ReadCSV("../Data/1.csv", (char ***)temp1, 4, 252) == false)
- {
- exit(EXIT_FAILURE);
- }
-
- return 0;
- }
复制代码
运行时会抛出异常,单步调试发现在往temp[i][j][k]里边传入数据的时候引发的异常。
我main里边定义的是一个三维数组,数组名应该是一个三维指针,所以我传入的时候写上了(char ***)给它强制转化成三维的数组指针。
我也想过直接传指针过去,但是连编译都过不去。
现在fgetc没有问题,三层循环也不需要考虑,我知道写什么goto不好很多人都没有这个习惯,但是这个部分代码运行正常
我的问题就是这个数组传参的问题怎么解决。
感谢回答!
- int ReadCSV(const char *FileName, char ***temp, unsigned int ColumnNumber, unsigned int RowNumber)
- {
- FILE *fp;
- if ((fp = fopen(FileName, "r")) == NULL)
- {
- return false;
- }
- // 为每个指针分配内存
- for (int i = 0; i < RowNumber; i++)
- {
- temp[i] = new char *[ColumnNumber];
- for (int j = 0; j < ColumnNumber; j++)
- {
- temp[i][j] = new char[STRINGSIZE];
- for (int k = 0; k < STRINGSIZE; k++)
- {
- char chartemp = fgetc(fp);
- temp[i][j][k] = ' ';
- if (chartemp == ',')
- {
- break;
- }
- if (chartemp == '\n')
- {
- goto NextRow;
- }
- }
- }
- NextRow:
- continue;
- }
- return true;
- }
- int main(void)
- {
- // 先分别读取附件1 附件2, 把他们的数据先存放在一个数组里边
- char ***temp1 = new char **[4]; // 声明为指针的指针
- for (int i = 0; i < 4; i++)
- {
- temp1[i] = new char *[252];
- for (int j = 0; j < 252; j++)
- {
- temp1[i][j] = new char[STRINGSIZE];
- }
- }
- if (ReadCSV("../Data/1.csv", temp1, 4, 252) == false) // 不再需要强制类型转换
- {
- exit(EXIT_FAILURE);
- }
- // 在使用完数组后,需要释放内存
- for (int i = 0; i < 4; i++)
- {
- for (int j = 0; j < 252; j++)
- {
- delete[] temp1[i][j];
- }
- delete[] temp1[i];
- }
- delete[] temp1;
- return 0;
- }
复制代码
|
|