Initializing an array after declaration

前端 未结 4 1384
自闭症患者
自闭症患者 2021-01-27 01:56

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

相关标签:
4条回答
  • 2021-01-27 02:19

    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.

    0 讨论(0)
  • 2021-01-27 02:24

    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;
        ...
    }
    
    0 讨论(0)
  • 2021-01-27 02:25

    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?

    0 讨论(0)
  • 2021-01-27 02:40

    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

    0 讨论(0)
提交回复
热议问题