我正在使用Linux 6.
我有一个具有固定记录长度的数据文件,即每行具有相同数量的char并由LINE-FEED char分隔。
该文件有一行标题和预告片,其中包含许多详细信息行。
文件中没有字段分隔符。所以,我必须使用另一个文件(称为格式文件)来表示字段。
然后,我将格式文件读入2D数组,然后相应地处理数据文件。
我使用2D数组来存储字段元数据。这是2D数组结构:
#define HEADER 0
#define DETAIL 1
#define TRAILER 2
struct _field {
char fieldName[64] ;
int startColumn ;
int endColumn ;
char fieldType ;
} fields[3][500] ;
int numFields[3] ; // count the number of fields in header/detail/trailer
第一个[3]用于标题/详细信息/预告片。
最多,详情行中有500个字段。但是,对于标题/预告行,最多有10个字段。
我使用这个2D数组来解码文件的标题/细节/尾部行中的所有字段。
这个2D数组是C程序的一种快速而简单的方法。对于标题/预告片,数组[500]实际上是一种浪费。
为了便于编程,我不想使用具有相同布局的另一种结构用于标题/预告片。我仍然喜欢使用这种2D阵列。
有没有什么方法我不需要浪费那么多......数组中的内存?
我想要的是字段[0] [10],字段[1] [500]和字段[2] [10]?
答案 0 :(得分:1)
将fields
更改为指针数组。
struct _field {
char fieldName[64] ;
int startColumn ;
int endColumn ;
char fieldType ;
} *fields[3];
fields[0] = malloc(10 * sizeof(struct _field));
fields[1] = malloc(500 * sizeof(struct _field));
fields[2] = malloc(10 * sizeof(struct _field));
然后您可以像以前一样访问fields
。记得把它们解放出来。
free(fields[0]);
free(fields[1]);
free(fields[2]);