【问题标题】:C - arrays, reading from file to struct array (calloc realloc free...)C - 数组,从文件读取到结构数组(calloc realloc free ...)
【发布时间】:2013-12-14 13:46:30
【问题描述】:

我在我的程序的第一步中失败了。首先,我需要从文件中读取结构数组。我没有做到这一点——我遇到了很多错误,我觉得我的阅读语法不正确一旦我这样做了,我将能够继续我的程序。我认为我必须使用 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) 一样读取 - 无论这些数字如何放置 - 我可以/必须跳转并读取

【问题讨论】:

  • 我不明白文件的格式。你说的是 (x, y) 坐标,但线的位数不同
  • calloc 函数返回一个指向某些已分配内存的指针,但 Trikamp 未声明为指针。请改用 struct Trikampiai *Trikamp; 声明,该声明已被注释掉。您需要使用Trikamp->stuff 而不是Trikamp.stuffmain 的返回类型应该是 int,而不是 void。你的代码缩进也有点奇怪。

标签: c arrays file struct calloc


【解决方案1】:

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

尝试:struct Trikampiai *Trikamp = calloc(1, dydis);,如果你想动态分配内存,或者只保留struct Trikampiai Trikamp;,如果你想自动分配。据我所知你程序的意图是您混淆了内存分配的这两个概念(堆栈与堆)。这是一个很好的资源:@​​987654321@

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 2014-04-06
      • 1970-01-01
      • 2013-12-14
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多