在 C 中动态增加数组大小
Increasing array size dynamically in C
我需要根据用户输入增加 2 个数组的长度。我正在使用下面的代码。但是输出与用户输入不匹配。
#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;
}
当用户输入值时:
35 4
20 3
40 1
60 7
20 8
那么这是输出:
8 4
20 3
40 1
60 7
20 8
如果数组长度超过 4,time
数组的最后一个元素将被打印为 size
数组的第一个元素。
为什么我的程序会给出这个输出?
让你入门的东西。
使用realloc()
通过指针调整内存指针的大小。
#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;
}
我需要根据用户输入增加 2 个数组的长度。我正在使用下面的代码。但是输出与用户输入不匹配。
#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;
}
当用户输入值时:
35 4
20 3
40 1
60 7
20 8
那么这是输出:
8 4
20 3
40 1
60 7
20 8
如果数组长度超过 4,time
数组的最后一个元素将被打印为 size
数组的第一个元素。
为什么我的程序会给出这个输出?
让你入门的东西。
使用realloc()
通过指针调整内存指针的大小。
#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;
}