在c中创建动态数组

标签 c arrays dynamic

我试图创建一个大小为 32 的动态数组,然后从某个文件中读取整数,并将它们存储在数组中。当数组填满后,将其大小加倍(创建另一个两倍大小的数组,将元素从旧数组复制到它并释放旧数组)直到输入文件耗尽。

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

#define limit 32

int main (int argc, char *argv[]) {

    FILE *file = fopen ("myFile1.txt", "r");
    int i = 0, num;
    int *B, *C;

    B = malloc (sizeof (int) * limit);

    while (fscanf (file, "%d", &num) > 0) {
        if (i < limit) {
            B[i] = num;
            i++;
        }
        else {
            C = malloc (sizeof (int) * 2 * limit);
            memcpy (C, B, limit * sizeof (int));
            free (B);

            B = C;
            B[i] = num;
            i++;
            limit = limt * 2;
            i++;
        }
    }
    return 0;
}

我收到类似这样的错误:“左值需要作为赋值的左操作数”和第二个错误:“段错误”。

因为,我正在尝试探索与动态数组相关的新可能性,以增加我的知识;帮我修改代码。

我们将不胜感激任何帮助。

最佳答案

您实际上可以使用 realloc() 为数组分配更多内存:

void *realloc(void *ptr, size_t size)

而不是那样做:

  {
    C=malloc(sizeof(int)*2*limit);
    memcpy(C,B,limit*sizeof(int));
    free(B);
    B=C;
    B[i]=num;
            i++;
            limit=limt*2;
    i++;
       }

你可以简单地做:

B = realloc(B,new_size_in_bytes);

谈论你的代码:

预处理器命令#define 将在编译前用与其关联的值(在本例中为 32)替换每个出现的单词“limit”。所以你不能在运行时真正改变宏的值。如果你想这样做,我的建议是不要定义限制,而是使用变量。 关于段错误我没有。请务必将名为“myFile1.txt”的文件放在 .c 文件所在的同一文件夹中,还要检查是否拼写错误。

关于在c中创建动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34931018/

相关文章:

C 从日期中获取一年中的第几天

c - 适用于 MAC 开发的 Xcode : How to have a keybinding for menu item?

javascript - 添加到javascript中复杂类型的数组

c - 用 char *p 定义字符串是正确的;然后再赋值?

reflection - 在 C# 4 中使用动态类型访问 javascript 对象的属性

haskell - 加载 Haskell 程序作为配置(如 xmonad)

c - MIPS:将 C 代码转换为 MIPS 函数调用和返回中的问题

c - 字符串数组与用户字符串比较给出访问错误

java - JCheckBox数组初始化或访问问题

java - 如何比较数组中的值?