Initialiser un tableau après la déclaration

gcc 4.4.3 c89

J’ai le code suivant comme exemple de ce que j’essaie de faire. Je ne connais pas la taille réelle du tableau, jusqu’à ce que j’entre dans la fonction. Cependant, je ne pense pas pouvoir définir la taille du tableau après l’avoir déclaré. J’en ai besoin de manière globale, car d’autres fonctions devront accéder aux noms d’appareils.

Merci beaucoup pour vos suggestions,

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

Vous aurez besoin d’allouer la mémoire dynamicment à l’aide de malloc:

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

Et utilisez ensuite free(device_names); libérer la mémoire quand vous n’en avez plus besoin.

Rendez-le 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; ... } 

Si vous utilisez un tableau global, vous devez connaître sa taille (ou sa taille maximale) au moment où vous le déclarez. Par exemple

 char *devices_names[MAX_DEVICES]; 

Si vous ne pouvez pas faire cela, vous n’avez pas d’autre choix que d’utiliser un pointeur et une mémoire allouée dynamicment.

Par exemple

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

Bien sûr, cela a des implications telles que: comment empêcher les gens d’accéder au tableau avant qu’il ait été atsortingbué et quand le libérez-vous?

Vous devez utiliser un pointeur. Ainsi, lorsque vous entrez la méthode, le tableau n’est toujours pas déclaré. Vous pouvez utiliser malloc pour définir la taille correcte. Regardez cet article: tableaux et malloc