[英]Initializing an array after declaration
gcc 4.4.3 c89
我有以下代碼作為我要嘗試做的示例。 在輸入函數之前,我不知道數組的實際大小。 但是,我認為聲明后無法設置數組大小。 我需要全局它,因為其他一些功能將需要訪問設備名稱。
非常感謝您的任何建議,
/* global */
char *devices_names[];
void fill_devices(size_t num_devices)
{
devices_names[num_devices];
/* start filling */
}
使其動態:
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動態分配內存:
char **device_names;
void fill_devices(size_t num_devices)
{
device_names = malloc(num_devices * sizeof(char*));
}
然后使用free(device_names);
在不再需要時釋放內存。
您應該使用一個指針,因此當您輸入該方法時,仍未聲明該數組。 您可以使用malloc
設置正確的大小。 看這篇文章: 數組和malloc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.