C - 数组,从文件读取到struct数组(calloc realloc free ...)

时间:2013-12-14 13:46:31

标签: c arrays file struct calloc

我的计划的第一步失败了。首先,我需要从文件读取结构数组。我没有做到这一点 - 我得到了很多错误,我感觉我的阅读语法不正确一旦我这样做,我将能够继续我的程序。我认为我必须使用calloc / realloc / free以及所有这些奇怪的东西,因为我的数据文件可能有很长的数字集。

我的数据文件:

4 5 5 6
9
5 7 6 9
6 5
1 8 1 2 3 6 5
1 9
4 5 5 6
9
5 7 6 9
6 5
1 8 1 2 3 6 5
1 9

它必须像坐标(x; y)一样被读取 - 无论这些数字是如何放置的 - 我可以/必须跳转和阅读

2 个答案:

答案 0 :(得分:1)

您对calloc的使用不正确。正如Herman在他的评论中所说,调用calloc会返回指向内存块sizeof(struct Trikampiai)字节长的指针;您将指针存储在int中。此外,您永远不会使用字符数组buf

如果您想要动态分配内存,请尝试:struct Trikampiai *Trikamp = calloc(1, dydis);,或者如果您想自动分配,请点击struct Trikampiai Trikamp;从我的内容可以告诉您的程序的意图,你混淆这两个内存分配的概念(堆栈与堆)。这是一个很好的资源:What and where are the stack and heap?

Trikamp->xas = sk; vs Trikamp.xas = sk

使用前者,您必须使用->运算符访问结构,而后者需要.运算符,这是我认为您想要的。

您还看到了哪些其他错误?

答案 1 :(得分:1)

您需要长度和计数指数。两者都可以在开始时设置为零。在循环中,如果length等于计数索引,则将长度增加一些合理的量,不要太小,不要太大,并使用增加的长度在trikamp数组上调用realloc

if(count==length) {
    length += delta;
    trikamp = (struct Trikampiai *)realloc(trikamp, dydis*length);
}

您可以访问结构字段(trikamp+count)->xas或等同于trikamp[count].xas,编译器将两者视为相同。