我有大约12000个预先知道的值,我需要在程序的早期放入数组中。鉴于某些情况,我稍后需要使用realloc调整此数组的大小。有没有办法用malloc / calloc用值初始化数组,或用其他几个值填充数组?
答案 0 :(得分:4)
您不能以这种方式初始化malloc
ed数组,最好的机会是在程序中静态地使用它,并在运行开始时将其复制到malloc
ed数组,例如:
static int arr[] = {1,2,3,4};
static int * malloced_arr;
// in the init function
malloced_arr = malloc(sizeof(arr));
if (malloced_arr)
{
memcpy(malloced_arr, arr, sizeof(arr));
}
答案 1 :(得分:1)
这是零长度数组有用的东西。例如:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct values {
int x[4];
int y[0];
} V = { {1, 2, 3} };
int
main( int argc, char ** argv )
{
int *t;
int i;
struct values *Y;
(void) argc; (void) argv;
/* Allocate space for 100 more items */
Y = malloc( sizeof *Y + 100 * sizeof *Y->y );
t = Y->x;
memcpy( Y, &V, sizeof V );
t[3] = 4;
for( i = 0; i < 4; i++ )
printf( "%d: %d\n", i, t[ i ]);
return 0;
}
当然,这真的只是一个客厅技巧,在Binyamin的解决方案中没有任何好处,并引入了许多完全不必要的混淆。