【问题标题】:C: Why I am getting a Segmentation Fault when trying to create a new folder/directory?C:为什么我在尝试创建新文件夹/目录时遇到分段错误?
【发布时间】:2017-03-10 05:16:30
【问题描述】:

我正在尝试使用两个命令行参数创建一个新文件夹,一个是目标文件夹,另一个是源文件夹,但我收到“分段错误(核心转储)”错误。你能帮我弄清楚是什么导致了这个错误。代码如下。

int main(int argc, char **argv){

    char *src = argv[1];
    char *dest = argv[2];

    DIR *srcdir;
    DIR *destdir;

    struct stat srcfile;
    struct stat destfile;
    struct dirent* directory;


    if ((stat(argv[1], &srcfile) == -1) || (stat(argv[2], &src) == -1)){
        exit(-1); //TODO: Change to proper error code
    }

    srcdir = opendir(src);
    destdir = opendir(dest);

    if ((srcdir == NULL)||(destdir == NULL)) {
        printf("No such file or directory exist.\n");
        exit(1);
    }

    char new_path[1024];

    new_path[0] = '\0';
    strcat(new_path, dest);
    strcat(new_path, "/");

    strcat(new_path, src); 

    if (stat(new_path, &destfile) == -1) {
        if(mkdir(new_path, 0700) != -1){
            mkdir(new_path, 0700);
        }else{
            perror("mkdir: ");
        }

    }
}

【问题讨论】:

标签: c segmentation-fault mkdir stat opendir


【解决方案1】:

我已经尝试过,以下代码可以正常工作:

#include<stdio.h>
#include <dirent.h>
#include <stdlib.h>
#include <sys/stat.h>
#include<string.h>

int main(int argc, char **argv){

    char *src = argv[1];
    char *dest = argv[2];

    DIR *srcdir;
    DIR *destdir;

    struct stat srcfile;
    struct stat destfile;
    //struct dirent* directory;


    if ((stat(src, &srcfile) == -1) || (stat(dest, &destfile) == -1)){
        exit(0); //TODO: Change to proper error code
    }

    srcdir = opendir(src);
    destdir = opendir(dest);

    if ((srcdir == NULL)||(destdir == NULL)) {
        printf("No such file or directory exist.\n");
        exit(1);
    }

    char new_path[1024];

    new_path[0] = '\0';
    strcat(new_path, dest);
    strcat(new_path, "/");

    strcat(new_path, src); 

    if (stat(new_path, &destfile) == -1) {
        if(mkdir(new_path, 0700) != -1){
            mkdir(new_path, 0700);
        }else{
            perror("mkdir: ");
        }
    }
    return 0;
}

编译命令

gcc -Wall xxx.c

【讨论】:

  • 干得好,但可能对您对代码所做的更改进行解释会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
  • 1970-01-01
相关资源
最近更新 更多