gpt4 book ai didi

c - 在C中,如何在目录中找到所有文件名并将它们存储在字符串数组中?

转载 作者:行者123 更新时间:2023-11-30 19:12:05 28 4
gpt4 key购买 nike

我在 C 中创建了一个代码来查找目录中的所有文件名,该代码是递归的,因此如果它在其中找到其他目录,则会查看其他目录。目录中的搜索和文件的搜索效果很好,因为我在屏幕上打印了程序读取的内容,并且我意识到找到所有文件名并且不重复任何文件名。我遇到的问题是,我将找到的文件名保存到一个字符串数组中,当您找到所有文件时,我将在主文件中包含所有文件名的字符串排列,但是当我在屏幕上打印时里面排列的并不是所有的文件,而是一些重复的文件名。这个程序的最终目标不是在屏幕上打印所有文件名,目的是在排列中保存所有文件名。我看不到错误,如果有人可以告诉我我做错了什么,我会心怀感激。

 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;

您分配了一 block 内存,然后立即丢失指向该内存的指针并泄漏它。您可能想要:

                p[*tam]=malloc(strlen(nombre)+1);
strcpy(p[*tam], nombre);

关于c - 在C中,如何在目录中找到所有文件名并将它们存储在字符串数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37915442/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com