在 C 中,如何在目录中找到所有文件名并将它们存储在字符串数组中?
In C how can I find in a directory all the file names and store them in a array of strings of characters?
我在 C 中创建了一个代码来查找目录中的所有文件名,此代码是递归的,因此如果它在其中找到其他目录,将检查其他目录。目录搜索和文件搜索效果很好,因为我在屏幕上打印了程序读取的内容,我意识到找到所有文件名并且不重复任何文件名。我遇到的问题是,我将找到的文件名保存到一个字符串数组中,当你找到所有文件时,我将主要包含所有文件名的字符串排列,但是当我在屏幕上打印时arrangement里面不是所有的文件,而是一些重复的文件名。这个程序的最终目标不是在屏幕上打印所有文件名,目的是在排列中保存所有文件名。我看不到错误,如果有人能告诉我我做错了什么,我会非常感激。
void findfiles(char *root,char *p[],int *tam){
DIR * dir;
struct dirent *entrada;
struct stat stt;
dir = opendir(root);
char *aux;
char nombre[BUFFER_TAM];
char buf[30];
if (dir == NULL) {
printf("hola4\n");
return;
}
while ((entrada = readdir(dir)) != NULL) {
if (strcmp(entrada->d_name,".")==0 || strcmp(entrada->d_name,"..")==0);
else {
if (entrada->d_type == DT_DIR){
strcpy(nombre,root);
strcat(nombre,"/");
strcat(nombre,entrada->d_name);
findfiles(nombre,p,tam);
}
else {
strcpy(nombre,root);
strcat(nombre,"/");
strcat(nombre,entrada->d_name);
p[*tam]=malloc(strlen(nombre)+1);
p[*tam]=nombre;
*tam = *tam +1;
}
}
}
}
void main(){
char *archivos[BUFFER_TAM];
char root[BUFFER_TAM]="/home/jesusmolina/Documentos";
int i=0,tam=0;
findfiles(root,archivos,&tam);
for (i;i<tam;i++)
printf("%s\n",archivos[i]);
}
p[*tam]=malloc(strlen(nombre)+1);
p[*tam]=nombre;
你分配了一块内存,然后立即丢失了指向那块内存的指针并泄漏了它。你可能想要:
p[*tam]=malloc(strlen(nombre)+1);
strcpy(p[*tam], nombre);
我在 C 中创建了一个代码来查找目录中的所有文件名,此代码是递归的,因此如果它在其中找到其他目录,将检查其他目录。目录搜索和文件搜索效果很好,因为我在屏幕上打印了程序读取的内容,我意识到找到所有文件名并且不重复任何文件名。我遇到的问题是,我将找到的文件名保存到一个字符串数组中,当你找到所有文件时,我将主要包含所有文件名的字符串排列,但是当我在屏幕上打印时arrangement里面不是所有的文件,而是一些重复的文件名。这个程序的最终目标不是在屏幕上打印所有文件名,目的是在排列中保存所有文件名。我看不到错误,如果有人能告诉我我做错了什么,我会非常感激。
void findfiles(char *root,char *p[],int *tam){
DIR * dir;
struct dirent *entrada;
struct stat stt;
dir = opendir(root);
char *aux;
char nombre[BUFFER_TAM];
char buf[30];
if (dir == NULL) {
printf("hola4\n");
return;
}
while ((entrada = readdir(dir)) != NULL) {
if (strcmp(entrada->d_name,".")==0 || strcmp(entrada->d_name,"..")==0);
else {
if (entrada->d_type == DT_DIR){
strcpy(nombre,root);
strcat(nombre,"/");
strcat(nombre,entrada->d_name);
findfiles(nombre,p,tam);
}
else {
strcpy(nombre,root);
strcat(nombre,"/");
strcat(nombre,entrada->d_name);
p[*tam]=malloc(strlen(nombre)+1);
p[*tam]=nombre;
*tam = *tam +1;
}
}
}
}
void main(){
char *archivos[BUFFER_TAM];
char root[BUFFER_TAM]="/home/jesusmolina/Documentos";
int i=0,tam=0;
findfiles(root,archivos,&tam);
for (i;i<tam;i++)
printf("%s\n",archivos[i]);
}
p[*tam]=malloc(strlen(nombre)+1);
p[*tam]=nombre;
你分配了一块内存,然后立即丢失了指向那块内存的指针并泄漏了它。你可能想要:
p[*tam]=malloc(strlen(nombre)+1);
strcpy(p[*tam], nombre);