这段代码返回了一个分段错误,当我尝试运行它的时候,没有任何东西显示出来,当我和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);
}
如果你能帮我的话谢谢
发布于 2014-04-22 17:15:13
这可能不是唯一的问题,但是您正在将字符串文字"."
传递给readRep
函数,然后在此函数中使用strcat
向其追加一些内容。您不能修改字符串文字,也不能向它们追加任何内容。
发布于 2014-04-22 17:23:09
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);
"chemin"/"size“和"str"/"MAX”没有任何共同之处,甚至连大小也没有。但是您可以使用一个来输出另一个。丑陋
顺便说一句:你没有初始化"str",所以它可能包含垃圾。
发布于 2014-04-24 15:59:39
我想我找到了,readdir()函数读取所有当前目录和子目录,...(我以为它只读当前目录)
因此,当我在函数readRep()上进行递归调用时,这一点并不清楚,但这可能会处理起来非常复杂。
https://stackoverflow.com/questions/23215170
复制相似问题