如何解决分段错误核心转储错误?

问题描述

我试图弄清楚为什么当我尝试运行我的程序时,我总是将分段错误核心转储为错误。它发生在我运行这部分代码之后:

 for(size_t i = 0; i< fLength;i++){
    splitPath = strtok(path1,":");//spltting the string by coln
    while(splitPath!=NULL && (pathsFound == 0 || a_flag == 1)){
        // if no flag,// it'll only loop through once if path is found.
        // It'll loop through until all paths have been checked and
        // printed if there is a flag
        copy = strcpy(copy,"");
        copy = strcpy(copy,splitPath);
        strcat(copy,"/");
        strcat(copy,fileName[i]);
        if(file_exists(copy)){
         printf("\n%s\n",copy);
          pathsFound == 1;
        }
splitPath = strtok(NULL,":");
    }
    if(pathsFound == 0){
      return 1;
    }
  }//end of for

因此从研究中,我一直在做这可能与我的 file_exist 函数有关,该函数根据文件是否存在返回 true 或 false。显然,最常见的情况与您没有权限时尝试访问文件有关?无论哪种方式,这是我的 file_exists 函数

bool file_exists(char* path) {
//int accessValue = access(path,F_OK);
// access returns -1 if it cannot access file and 0 otherwise
int check = 0;
  struct stat buffer;
    int exist = stat(path,&buffer);
    if(exist == 0)
        check = 1;
    else // -1
        check = 0;

if(check == 1){
    return true;
}else{
    return false;
}
}

所以这是我创建的一个函数库,以包含在我的 main.c 文件中。我只是在谷歌上搜索如何检查文件是否存在并尝试了几个不同的程序。所有的结果都是一样的。所以也许它甚至不是我的 file_exists 函数

你们能帮我破译这是怎么回事吗?提醒一下,我是 C 新手,这是我正在制作的第一个程序!

编辑#1: 这是我代码的第一部分

int a_flag = 0; //counter
int return_value = 0;
const char *fileName[argc]; //size related to amount of arguments
int fLength = 0;
int fileFound;
char* copy;
char *path1 = getenv("PATH"); //file path
char *splitPath;//spltting the string by coln
  int pathsFound = 0;//counting the amount of existing paths that have been found

 for (size_t i = 1; i < argc; i++){
    if (strcmp(argv[i],"-a") == 0){
      a_flag = 1;
    }else{
      if (argv[i][0] == '-'){
        printf("Invalid flag!\n");
        return 2;
      }else{
        fileName[fLength]=argv[i];
        fLength++;
      }
      // Either:
      // 1. We have an unkNown flag
      // 2. We have a filename
    }
  }
printf("%d\n",fLength);
 

splitPath = strtok(path1,":");
while(splitPath!=NULL){
printf("\n%s\n",splitPath);
splitPath = strtok(NULL,":");
   }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)