我试图从2个目录中读取并将其内容放入两个动态数组中 当我读到我得到一个段错误。我能看到它的唯一地方就是在循环中添加?
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
int main(int argc, char** argv) {
// get directory parameters
DIR *dirA;
DIR *dirB;
struct dirent *dA;
struct dirent *dB;
//check if dir A exists
if (!(dirA = opendir(argv[1])))
fprintf(stderr,"Failed to open directory %s \n",argv[1]);
//check if dir B exists
if (!(dirB = opendir(argv[2])))
fprintf(stderr,"Failed to open directory %s \n",argv[2]);
//open dir
dirA= opendir(argv[1]);
dirB= opendir(argv[2]);
int sizeA;
int sizeB;
while (0!= (dA = readdir(dirA)))
{
sizeA++;
}
while (0!= (dB = readdir(dirB)))
{
sizeB++;
}
char**contentsA;
char**contentsB;
contentsA=(char**)(malloc(80*sizeof(char*)));
contentsB=(char**)(malloc(80*sizeof(char*)));
int i=0;
while (0!= (dA = readdir(dirA)))
{
contentsA[i]=dA->d_name;
i++;
}
i=0;
while (0!= (dB = readdir(dirB)))
{
contentsB[i]=dB->d_name;
}
for ( i=0; i<sizeA; i++)
{
printf("%s\n", contentsA[i]);
}
for ( i=0; i<sizeB; i++)
{
printf("%s\n", contentsB[i]);
}
printf("size a = %d \n size b = %d\n", sizeA, sizeB);
return (EXIT_SUCCESS);
}
我认为问题可能出在最后一个循环中
答案 0 :(得分:1)
有很多错误。
一个是您从目录条目存储名称指针,但不复制字符串数据。你只是复制指针,它指向你不拥有的内存。所有名称很可能都指向内存中的相同位置。
此外,您永远不会使用每个目录中的项目数,而是硬编码80个条目。如果超过80,您将覆盖随机存储器。
你也应该关闭目录并重新打开它,或者(更好)在第二次循环之前调用rewinddir()
,否则你的目录流就会耗尽。