C语言 动态分配结构数组



我很难在 C 中处理 malloc,尤其是在分配结构数组时。我有一个程序,基本上将所有文件名和文件大小存储在结构数组中。我在不使用malloc的情况下让我的程序工作,但我真的不喜欢这种编程方式。 我可以在我的程序中使用 malloc 获得任何帮助吗?

int getNumberOfFiles(char *path)
{
int totalfiles = 0;
DIR *d;
struct dirent *dir;
struct stat cstat;
d = opendir(path);
while(( dir = readdir(d)) != NULL) {
totalfiles++;
}
return totalfiles;
}
int main()
{
int totalfiles = getNumberOfFiles(".");
int i =0;
DIR *d;
struct dirent *dir; 
d = opendir(".");
struct fileStruct fileobjarray[totalfiles];
struct stat mystat;
while(( dir = readdir(d)) != NULL) {
fileobjarray[i].filesize=mystat.st_size;
strcpy (fileobjarray[i].filename ,dir->d_name );
i++;
}
}

如您所见,我创建了一个名为 getnumberoffiles(( 的函数来获取静态分配的大小。

struct fileStruct fileobjarray[totalfiles];

fileobjarray 是一个 VLA 数组,其大小总计为 fileStruct 结构。要使用 malloc 进行分配,我们可以编写:

struct fileStruct *fileobjarray = malloc(totalfiles * sizeof(*fileobjarray));

我们将为totalfiles元素数组分配内存,每个元素的大小sizeof(*fileobjarray) = sizeof(struct fileStruct)。有时 calloc 在 C 中更可取,因为它可以保护(在某些平台上(防止溢出:

struct fileStruct *fileobjarray = calloc(totalfiles, sizeof(*fileobjarray));

并记得free().

int getNumberOfFiles(char *path)
{
int totalfiles = 0;
DIR *d;
struct dirent *dir;
struct stat cstat;
d = opendir(path);
while(( dir = readdir(d)) != NULL) {
totalfiles++;
}
return totalfiles;
}
int main()
{
int totalfiles = getNumberOfFiles(".");
int i =0;
DIR *d;
struct dirent *dir; 
d = opendir(".");
struct fileStruct *fileobjarray = calloc(totalfiles, sizeof(*fileobjarray));
if (fileobjarray == NULL) {
fprintf(stderr, "Error allocating memory!n");
return -1;
}
struct stat mystat;
while(( dir = readdir(d)) != NULL) {
fileobjarray[i].filesize=mystat.st_size;
strcpy (fileobjarray[i].filename ,dir->d_name );
i++;
}
free(fileobjarray);
}

相关内容

  • 没有找到相关文章

最新更新