【发布时间】:2014-04-22 09:09:07
【问题描述】:
当我尝试运行此代码时,它会返回分段错误 使用 gcc 构建文件时没有出现任何内容
如果您对在哪里搜索修复它有任何想法,请提供您的建议,谢谢。
它必须在函数 readrep() 中发生,尤其是 opendir() 和 readdir() 但我没有发现有什么问题, 感谢帮助
#include<dirent.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<limits.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define MAX 256
FILE* f;
void gowrite(char * chemin){
f=fopen("locate.db.tmp","a+");
int size=strlen(chemin);
char str[MAX];
fwrite(&size,sizeof(int),1,f);
fwrite(str,sizeof(char),size,f);
fclose(f);
}
void readRep(char* str){
struct dirent repStruct;
struct dirent * prepStruct;
struct stat structStat;
struct stat *buff;
buff=&structStat;
prepStruct=&repStruct;
DIR * d=opendir(str);
while((prepStruct=readdir(d))!=NULL){
int x;
char* fi=malloc(sizeof(char)*MAX);
fi=(prepStruct->d_name);
x=stat(fi,buff);
mode_t m;
m=structStat.st_mode;
int test;
test=S_ISREG(m);
if(test==0){
strcat(str,"/");
strcat(str,fi);
readRep(str);
}
else{
char *chemin=realpath(fi,NULL);
gowrite(chemin);
free(chemin);
chemin=NULL;
}
}
}
int main(int argN,char** argv){
char* path=getenv("HOME");
chdir(path);
readRep(".");
rename("locate.db.tmp","locate.db");
exit(0);
}
如果你能帮助我,谢谢
【问题讨论】:
-
用符号编译(选项
-g),然后使用调试器(gdb)运行代码。它将显示崩溃发生的确切位置,并允许您检查所有使用的变量。 -
正确格式化来源肯定会提高阅读的接受度。
-
总是检查 fopen() 的结果。
标签: c segmentation-fault readdir opendir dirent.h