微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

 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 举报,一经查实,本站将立刻删除。