如何动态分配数组

How to allocate array dynamically

在此代码中,我打开一个目录并创建该目录中存在的元素数组,因此我必须首先检查该目录中存在的元素 (arr_len) 的数量,以便我可以给出我的阵列那么大。在此之后,我正在创建一个 arr[arr_len] 这样的。我想根据目录中存在的元素数量动态分配内存。使用 malloc、calloc、realloc 或其他任何东西。

DIR *dr = opendir("/path/");
if (dr == NULL) {
     printf("Could not open current directory" );
     return 0;
}
closedir(dr);

DIR *dr_ = opendir("/path/");
if (dr_ == NULL)    {
     printf("Could not open current directory" );
     return 0;
}

int i=0;
int arr[arr_len];
json_object *jobj = json_object_new_object();
while ((de = readdir(dr_)) != NULL){
     if ((strcmp(de->d_name, ".") != 0) && (strcmp(de->d_name, "..") != 0)){
         char file_name[50];
         strcpy(file_name, de->d_name);
         char *strarr[10];
         unsigned char *token = strtok(file_name, "-");
         int j =0;
         while (token!=NULL){
               strarr[j++] = token;
               token = strtok(NULL, "-");
         }
         int val = atoi(strarr[1]);
         arr[i] = val;
         i++;
         json_object_object_add(jobj, strarr[1], json_object_new_string(de->d_name));
    }
}
closedir(dr_);

您可以使用 realloc()。典型的用法是:

int arr_size = 0;
int *arr = NULL;

// extending by 1 element

int *new_arr = realloc(arr, (arr_size + 1) * sizeof *new_arr);
if (!new_arr) { ... error handling ... }
arr = new_arr;
arr[arr_size++] = ...

如果程序预计会在 realloc() 失败时严重失败,那么您可以通过省略 new_arr.

来简化程序
arr = realloc(arr, (arr_size + 1) * sizeof *arr);
if (!arr) { ... error message and exit program ... }