如何动态分配数组
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 ... }
在此代码中,我打开一个目录并创建该目录中存在的元素数组,因此我必须首先检查该目录中存在的元素 (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 ... }