标题/详细信息/尾部字段的2d数组

时间:2015-04-27 02:37:45

标签: c

我正在使用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]?

1 个答案:

答案 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]);
相关问题