当我尝试运行它时,此代码会返回一个segmentatin错误 没有任何东西可以用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);
}
如果你可以帮助我,谢谢
答案 0 :(得分:3)
这可能不是唯一的问题,但您传递给readRep
函数字符串文字"."
,然后在此函数中使用strcat
向其附加内容。您不能修改字符串文字,并且肯定不能向它们附加任何内容。
答案 1 :(得分:0)
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);
btw:你没有初始化“str”,所以它可能包含垃圾。
答案 2 :(得分:0)
我想我找到了, readdir()函数读取所有当前的direcory和子目录,... (我认为它只读取当前目录)
所以,当我对我的函数readRep()进行递归调用时,这个问题并不清楚,但是可能需要处理很多复杂性。