C语言,readdir和运行时的分段错误

时间:2014-04-22 09:09:07

标签: c segmentation-fault readdir opendir dirent.h

当我尝试运行它时,此代码会返回一个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);





}

如果你可以帮助我,谢谢

3 个答案:

答案 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);
“chemin”/“size”和“str”/“MAX”没有任何共同点,甚至没有大小。但是你用一个来输出另一个。 难看

btw:你没有初始化“str”,所以它可能包含垃圾。

答案 2 :(得分:0)

我想我找到了,  readdir()函数读取所有当前的direcory和子目录,... (我认为它只读取当前目录)

所以,当我对我的函数readRep()进行递归调用时,这个问题并不清楚,但是可能需要处理很多复杂性。