在使用opendir()获得DIR*之后,我需要使用readdir()读取结构目录并将其存储到数组中。
为了计算数组的大小,我可以循环遍历并计算条目数然后,我可以分配数组,然后再次循环以读取和存储结构目录。
但是,我想知道是否有更好的方法来获取dir条目的数量?

最佳答案

重新定位可能是最好的方法下面是一个示例(为演示目的选择较小的分配大小)。未执行错误检查在循环的最后,direntArray有货物,count告诉您有多少。

#define num_to_alloc 10

int main(int argc, const char * argv[])
{

    struct dirent *direntArray = NULL;

    DIR *myDir = opendir("/tmp");
    int count = 0;
    int max = 0;
    struct dirent *myEnt;

    while ((myEnt = readdir(myDir))){
        if ( count == max ){
            max += num_to_alloc;
            direntArray = realloc(direntArray, max * sizeof(struct dirent));
        }
        memcpy(&direntArray[count], myEnt, sizeof(struct dirent));
        count++;
    }
    return 0;
}

10-04 14:35