声明后初始化数组

gcc 4.4.3 c89

我有以下代码作为我想要做的样本。 在我输入函数之前,我不知道数组的实际大小。 但是,我认为在声明之后我不能设置数组大小。 我需要全局,因为其他一些function需要访问设备名称。

非常感谢任何建议,

/* global */ char *devices_names[]; void fill_devices(size_t num_devices) { devices_names[num_devices]; /* start filling */ } 

您需要使用malloc动态分配内存:

 char **device_names; void fill_devices(size_t num_devices) { device_names = malloc(num_devices * sizeof(char*)); } 

然后使用free(device_names); 不再需要时释放内存。

让它动态:

 char **g_device_names; int g_num_devices; void fill_devices(size_t num_devices) { g_device_names = malloc(sizeof(char*) * num_devices); g_num_devices = num_devices; ... } 

如果您正在使用全局数组,那么您需要在声明它时知道它的大小(或它的最大大小)。 例如

 char *devices_names[MAX_DEVICES]; 

如果你不能这样做,那么你别无选择,只能使用指针和动态分配的内存。

例如

 char **devices_names = 0; void fill_devices(size_t num_devices) { devices_names = malloc( num_devices * sizeof *devices_names ); /* ... */ } 

当然,这会产生一些影响,例如如何防止人们在分配数据之前访问数组以及何时释放它?

您应该使用指针,因此当您输入方法时,仍未声明该数组。 您可以使用malloc设置正确的大小。 看看这篇文章: 数组和malloc