gcc 4.4.3 c89
I have the following code as a sample of what I am trying to do. I don\'t know the actual size of the array, until I enter the function. However, I don\'t
You'll need to allocate the memory dynamically using malloc:
char **device_names;
void fill_devices(size_t num_devices)
{
device_names = malloc(num_devices * sizeof(char*));
}
And then use free(device_names);
to free the memory when you no longer need it.
Make it dynamic:
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;
...
}
If you are using a global array then you need to know its size (or it's maximum size) at the time you declare it. E.g.
char *devices_names[MAX_DEVICES];
If you can't do this then you have no option but to use a pointer and dynamically allocated memory.
E.g.
char **devices_names = 0;
void fill_devices(size_t num_devices)
{
devices_names = malloc( num_devices * sizeof *devices_names );
/* ... */
}
Of course this has implications such as how do you prevent people accessing the array before it has been allocated and when do you free it?
You should use a pointer, so when you enter the method the array is still not declared.
You can use malloc
to set the correct size. Look at this article: arrays and malloc