【发布时间】:2016-01-21 18:01:24
【问题描述】:
我正在尝试创建一个大小为 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;
}
我收到如下错误:“lvalue required as left operand of assignment”和第二个错误:“segmentation fault”。
因此,我正在尝试探索与动态数组相关的新可能性,以增加我的知识;通过修改代码来帮助我。
我们将不胜感激。
【问题讨论】:
-
请修正格式,您的限制变量似乎丢失了。
-
@Bruce 他使用预处理器命令#define 来“定义”限制
-
您可以使用
realloc():limit = limit * 2; B = realloc(B, limit*sizeof(int));调整数组大小并复制其数据。无需创建名为C的临时数组。 -
将数组增加到两倍大小可能有点贪心 - 将它增加一个固定数量怎么样 - 比如说 32 或 1000 任何合适的。
-
您需要将
limit设为变量,而不是宏。