无法在 c 中递归读取 directory/files
not able to read directory/files recursively in c
#include <stdio.h>
#include <string.h>
#include <dirent.h>
#include <stdlib.h>
void listFilesRecursively(void *p);
struct data {
char path[100];
};
int main(int argc, char* argv[])
{
// Directory path to list files
struct data *d= (struct data *)malloc(sizeof(struct data *));
strcpy(d->path,argv[1]);
listFilesRecursively(d); //need to send a struct
return 0;
}
void listFilesRecursively(void *p)
{
struct data *d = (struct data *)p;
char path[100];
struct dirent *dp;
DIR *dir = opendir(d->path);
// Unable to open directory stream
if (!dir)
return;
while ((dp = readdir(dir)) != NULL)
{
if (strcmp(dp->d_name, ".") != 0 && strcmp(dp->d_name, "..") != 0)
{
printf("%s\n", d->path);
struct data *nd= (struct data *)malloc(sizeof(struct data *));
// Construct new path from our base path
strcpy(path, d->path);
strcat(path, "/");
strcat(path, dp->d_name);
strcpy(nd->path,path);
listFilesRecursively(nd);
}
}
closedir(dir);
}
我的想法是列出我作为参数发送的目录中的文件和子目录。它适用于几个目录,然后我得到 malloc(): corrupted top size
中止(核心转储)
我可能是盲人,我没有看到这个问题,有什么建议吗?提前致谢!
线条
struct data *d= (struct data *)malloc(sizeof(struct data *));
struct data *nd= (struct data *)malloc(sizeof(struct data *));
是错误的,因为你必须为结构分配,而不是为结构的指针分配。
他们应该是
struct data *d= malloc(sizeof(*d));
struct data *nd= malloc(sizeof(*nd));
或(如果您坚持为 sizeof
写类型名称):
struct data *d= malloc(sizeof(struct data));
struct data *nd= malloc(sizeof(struct data));
另请注意,在 C 中转换 malloc()
的结果是 discouraged。
#include <stdio.h>
#include <string.h>
#include <dirent.h>
#include <stdlib.h>
void listFilesRecursively(void *p);
struct data {
char path[100];
};
int main(int argc, char* argv[])
{
// Directory path to list files
struct data *d= (struct data *)malloc(sizeof(struct data *));
strcpy(d->path,argv[1]);
listFilesRecursively(d); //need to send a struct
return 0;
}
void listFilesRecursively(void *p)
{
struct data *d = (struct data *)p;
char path[100];
struct dirent *dp;
DIR *dir = opendir(d->path);
// Unable to open directory stream
if (!dir)
return;
while ((dp = readdir(dir)) != NULL)
{
if (strcmp(dp->d_name, ".") != 0 && strcmp(dp->d_name, "..") != 0)
{
printf("%s\n", d->path);
struct data *nd= (struct data *)malloc(sizeof(struct data *));
// Construct new path from our base path
strcpy(path, d->path);
strcat(path, "/");
strcat(path, dp->d_name);
strcpy(nd->path,path);
listFilesRecursively(nd);
}
}
closedir(dir);
}
我的想法是列出我作为参数发送的目录中的文件和子目录。它适用于几个目录,然后我得到 malloc(): corrupted top size 中止(核心转储) 我可能是盲人,我没有看到这个问题,有什么建议吗?提前致谢!
线条
struct data *d= (struct data *)malloc(sizeof(struct data *));
struct data *nd= (struct data *)malloc(sizeof(struct data *));
是错误的,因为你必须为结构分配,而不是为结构的指针分配。
他们应该是
struct data *d= malloc(sizeof(*d));
struct data *nd= malloc(sizeof(*nd));
或(如果您坚持为 sizeof
写类型名称):
struct data *d= malloc(sizeof(struct data));
struct data *nd= malloc(sizeof(struct data));
另请注意,在 C 中转换 malloc()
的结果是 discouraged。