我希望能够在我的程序读取数字时重新分配空间量。 例如,当它运行时,它应该能够读取任意数量的整数,然后将它们打印出来作为< Int Array :(所有输入)' 这是我到目前为止所尝试的:
int main(int argc, char **argv)
{
int i = 0, n, num;
int *A;
A = malloc(sizeof(A));
while(scanf("%d",&num) == 1)
{
A[i] = num;
i++;
}
n = sizeof(A)/sizeof(A[0]);
printf("Int Array: ");
for (i = 0; i < n; i++)
{
printf("%d ", A[i]);
}
return 0;
}
答案 0 :(得分:4)
您的代码存在一些问题
int A*;
无效,您的意思是int *A;
如果要分配一个元素,则正确的语法是
A = malloc(sizeof(*A));
在这一行
n = sizeof(A) / sizeof(A[0]);
sizeof()
运算符给出了poitner类型的大小,在这种情况下它与
n = sizeof(void *) / sizeof(int);
可以是2
或1
。
您可以静态设置数组的大小,在这种情况下我建议避免使用malloc()
,或者您可以询问用户,无论如何您无法从指针获取该大小,因此您必须存储它,例如
if (scanf("%d", &size) != 1)
return -1;
A = malloc(size * sizeof(*A));
if (A == NULL)
return -1;
/* proceed to work with `A' and keep `size' somewhere, you need it */
free(A);
答案 1 :(得分:2)
您也可以先保留特定数量的内存,例如: 如果用户输入超过10个项目,则重新分配另一个20个整数的内存块,并将最后10个项目复制到新块中,依此类推。
fwrite(L->PAGES, sizeof(int), 1, arq);
答案 2 :(得分:0)
一个技巧是在每个新输入中重新分配内存。
int indefiniteInput() {
int num;
int index = 0;
int *inputs = malloc(sizeof (int));
if (inputs == NULL) {
perror("malloc failed!");
return -1;
}
printf("Input numbers: ");
while(scanf("%d", &num) == 1) {
// stops getting inputs when -1 is entered,
// you can change it to any value you want
if (num == -1)
break;
// reallocates memory for the input
int *temp = realloc(inputs, sizeof (int) * (index + 1));
if (temp == NULL) {
free(inputs);
perror("realloc failed!");
return -1;
}
inputs = temp;
// adds the last input to reallocated memory
inputs[index++] = num;
}
printf("Stored inputs: ");
int i = 0;
for (; i < index; i++)
printf("%d ", inputs[i]);
free(inputs);
return 0;
}
输出:
Input numbers: 5 6 7 8 9 -1
Stored inputs: 5 6 7 8 9 -1
Input numbers: 1 2 3 5 -5 -6 89 256 2001 45600 96 33 369 -1
Stored inputs: 1 2 3 5 -5 -6 89 256 2001 45600 96 33 369