问题
I need to increase length of 2 arrays according to user input. I'm using the code below. But output is not matching with user input.
#include<stdio.h>
int main()
{
int i=0, key=0, size[key], time[key];
while (key!=-1)
{
printf("Insert value for size : ");
scanf("%d",&size[i]);
printf("Insert value for time : ");
scanf("%d",&time[i]);
i++;
printf("Run again Press-1 or Exit : ");
scanf("%d",&key);
}
int x=0;
for (x ; x<i ; x++)
{
printf("%d %d\n",size[x],time[x]);
}
return 0;
}
When user inputs the values:
35 4
20 3
40 1
60 7
20 8
Then this is the output:
8 4
20 3
40 1
60 7
20 8
If length of array exceeded 4, the last element of the time
array will be printed as the first element of the size
array.
Why does my program give this output?
回答1:
Something to get you started.
Use realloc()
to re-size the memory pointer to by a pointer.
#include <stdlib.h>
#include <stdio.h>
int main(void) {
// Start with NULL and a size of 0
int *my_time = NULL;
size_t sz = 0;
while (!some_exit_condition) {
long long ll;
printf("Insert value for size : ");
if (scanf("%lld", &ll) != 1) {
puts("Numeric input missing");
break;
}
if (ll < 0 || ll > SIZE_MAX) {
puts("Size out of range");
break;
}
sz = (size_t) ll;
void *new_ptr = realloc(my_time, sz * sizeof *my_time);
if (new_ptr == NULL && sz != 0) {
puts("Out of memory");
break;
}
my_time = new_ptr;
// do something with `my_time` and `sz`
}
// Clean-up
free(my_time);
my_time = NULL;
sz = 0;
return 0;
}
来源:https://stackoverflow.com/questions/32619428/increasing-array-size-dynamically-in-c