C中遍历文件夹函数readdir,然后打开里面的文件出现段错误
在linux的vim编辑
#include<stdio.h>
#include<sys/types.h>
#include<dirent.h>
int main()
{
FILE *fp;
DIR *dir;
struct dirent *ptr;
dir=opendir("./music");
while((ptr=readdir(dir))!=NULL)
{
printf("d_name:%s\n",ptr->d_name);
fp=fopen((ptr->d_name),"r");
fclose(fp);
}
closedir(dir);
return 0;
}
编译的时候没有错误,但是执行到 “fp=fopen((ptr->d_name),"r"); ”这句就出现段错误。 C readdir
[解决办法]
有些文件没有打开,此时fp=NULL;
然后使用fclose(fp) 就会出现段错误
[解决办法]
如楼上所说,非fopen失败导致出现段错误,而是因为close关闭空指针所致,fopen失败,
则是因为文件名参数路径错误所致,我修改一下。
#include<stdio.h>
#include<sys/types.h>
#include<dirent.h>
#include<errno.h>
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
FILE *fp;
DIR *dir;
struct dirent *ptr;
dir=opendir("./music");
while((ptr=readdir(dir))!=NULL)
{
printf("d_name:%s\n",ptr->d_name);
fp=fopen((std::string("./music/")+std::string(ptr->d_name)).c_str(),"r");
if (fp) {
fclose(fp);
} else {
printf("%d, errno=%d\n",__LINE__, errno);
}
}
closedir(dir);
return 0;
}