C:当大小直到运行时才知道时如何初始化全局数组?

C: How do I initialize a global array when size is not known until runtime?

我正在用 C(不是 C99)编写一些代码,我想我需要几个全局数组。我从几个我还不知道大小的文本文件中获取数据,我需要存储这些值并以多种不同的方法提供它们。我已经编写了将文本文件读入数组的代码,但如果数组不是最佳选择,我相信我可以重写它。

如果你遇到这种情况,你会怎么做?我不一定需要代码示例,只是想法。

使用动态分配:

int* pData;
char* pData2;

int main() {
    ...
    pData = malloc(count * sizeof *pData); // uninitialized
    pData2 = calloc(count, sizeof *pData2); // zero-initialized
    /* work on your arrays */
    free(pData);
    free(pData2);
    ...
}

首先,尝试理解需求。您不可能初始化 "unknown" 大小的内存,只有在拥有一定数量的内存(以字节为单位)后才能对其进行初始化。所以,首先要做的就是分配内存。

这是使用内存分配器函数 malloc() 和家族的场景,它允许您在 运行 时分配给定大小的内存。定义一个指针,然后在 运行 时获取内存大小并使用分配器函数分配所需大小的内存。

也就是说,

  • calloc()将返回的内存初始化为0
  • realloc()用于在运行时调整内存大小。
  • 此外,在使用动态内存分配时,您应该注意在使用完内存后使用free()清理分配的内存以避免内存泄漏。