我有一个函数可以读取单个输入目录中包含的所有文件。
我想让该函数不仅读取“主”目录中的文件,还读取所有子目录中包含的文件。
为此,我编写了以下代码:
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
#include <stdio.h>
struct dirent *readdir(DIR *dirp);
char * percorso;
DIR *cartella;
struct dirent *elemento;
char * scrivi(char * a, char * b)
{
char *targetdir = malloc(2048);
strcpy(targetdir,a);
strcat(targetdir,"/");
strcat(targetdir,b);
printf("%s \n", targetdir);
return targetdir;
}
void scorriFolder(char* nome)
{
if ((cartella = opendir(nome)) == NULL)
perror("opendir() error");
else {
printf("contents of root: \n");
while ((elemento = readdir(cartella)) != NULL)
{
if(elemento->d_type == DT_DIR)
{
if(elemento->d_name != ".." || elemento->d_name != ".")
{
percorso = scrivi(nome, elemento->d_name);
scorriFolder(percorso);
}
}
else
{
printf(" %s\n", elemento->d_name);
}
}
closedir(cartella);
}
}
main(int argc, char * argv[]) {
scorriFolder(argv[1]);
}
但它甚至没有编译,说:
warning: incompatible implicit declaration of built-in function ‘malloc’
warning: incompatible implicit declaration of built-in function ‘strcpy’
warning: incompatible implicit declaration of built-in function ‘strcat’
据我所知,这个问题是由于传递给malloc
,strcpy
和strcat
函数的变量格式错误造成的。(elemento->d_name
有类型char
而不是char*
为了使此代码正常工作,我该怎么做?
谢谢。
编辑
这是一个工作while
片段:
while ((elemento = readdir(cartella)) != NULL)
{
if ( strcmp(elemento->d_name, ".") == 0)
{
continue;
}
if ( strcmp(elemento->d_name, "..") == 0)
{
continue;
}
if(elemento->d_type == DT_DIR)
{
{
percorso = scrivi(nome, elemento->d_name);
scorriFolder(percorso);
}
}
else
{
printf(" %s\n", elemento->d_name);
}
}
一旦它扫描一个子目录,它就会崩溃,因为当程序从子目录退出时它没有更新路径。我正在尝试修复它。