首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C中遍历文件夹函数readdir,然后打开里面的文件出现段异常

2013-06-25 
C中遍历文件夹函数readdir,然后打开里面的文件出现段错误在linux的vim编辑#includestdio.h#includesys/

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;
}

热点排行