在使用未知数据长度的行读取文件时,动态分配C语言数组

2024-04-24 16:15:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有个简单的问题。我必须把一些python代码转换成c语言,而我对c语言没有那么丰富的经验

我在python中遍历一个文件,逐行读取。如果行中有某个标记,我必须将其拆分并将值读入int数组。然后使用该数组进行进一步处理。此处给出了一个文件示例:

Event   163
Time    29-05-2013, 11:41:45
TDC1.HEX_B  927532 1460340
TDC1.HEX_F   -1
TDC1.HEX_x1 930080 1462311
TDC1.HEX_x2 929198 1462611
TDC1.HEX_y1 1462957
TDC1.HEX_y2 928628 1462151
TDC1.HEX_z1 929097 
TDC1.HEX_z2 930314 1462992
TDC1.Trigger    1728347
errors  0 0 0 0
proc_time   40
%
Event   500

现在我的问题是,我不知道每行中会有多少个整数。在python中,我可以这样做:

^{pr2}$

在这个例子中,B是一个长度与numbers\u str中的数字计数相对应的列表。在c中是否有类似的可能性分配一个足够长的数组?稍后在处理数据时,我必须遍历数组。我读过关于malloc()和realloc()的文章。他们有帮助吗?如果是这样的话,有没有好的资源来阅读它们呢?我是否需要先读取这一行,然后为该行中的int数malloc一个数组?在


Tags: 文件代码标记event语言示例time数组
2条回答

如果你可以使用C++,你可能会发现一个std::vector更容易使用。如果您必须使用C语言,那么可以将数组malloc设置为某个初始大小,并使用int来跟踪它的大小以及它的完整程度。然后,每次添加到数组时,都要检查是否要过满,如果是,则重新分配它以使其容量更大(例如每次为x2)。在

一些代码:

int initialSize=2;
int size=initialSize;
int nElements=0;
int* myArray=malloc(initialSize*sizeof(int));

//Do some line-by-line parsing

//Found a token
int token; //You set this

if(nElements==size)
{
    size=size*2;        
    myArray=realloc(myArray, size*sizeof(int));
}

myArray[nElements]=token;
nElements++;

如果您不知道所需的数组有多大,malloc()和{}就是您需要的。使用malloc()在开始时分配内存。将一个变量保留为当前分配的内存大小,另一个变量保留到目前为止存储的值的数量。当存储了最大数量的值后,使用realloc()来获得更大的内存区域。在

相关问题 更多 >