C语言 创建目录时出现分段错误(核心转储)



我有这个简单的代码:

int read_data(int GrNr) {
    //many lines of code
    fprintf(fdatagroup, "%i", Ngroups);
    return 0;
}
int main(int argc, char **argv) {
    for(NUM=NUM_MIN;NUM<=NUM_MAX;NUM++) {
        sprintf(groupfile,"../output/profiles/properties_%03d.txt", NUM);
        fdatagroup = fopen(groupfile,"w");
        GROUP=0;
        accept=0;
        do {
            check=read_data(GROUP);
            printf("check = %d n", check);
            accept++;
            FOF_GROUP++;
        }
        while (accept<=n_of_halos);
        fclose(fdatagroup);
    }
    printf("Everything done.n");
    return 0;
}

如果我不手动创建输出目录中名为"配置文件"的文件夹,我会得到错误:Segmentation fault (core dumped)

如果文件夹在那里,一切正常。我该怎么做才能从代码内部创建目录?我在 Linux 中使用 gcc。谢谢。

就像一些背景一样,当fopen尝试打开一个不存在的文件时,它不会失败,而是简单地返回NULL。 然后,当您尝试将数据读/写到空指针时,会发生 seg 错误。

目录的创建和销毁属于 sys/dir.h 的范畴

#include <sys/dir.h>
...
mkdir(path_str);

在 Linux 上:

#include <sys/stat.h>
#include <sys/types.h>
mkdir("/path/to/dir", 0777); // second argument is new file mode for directory (as in chmod)

您还应该始终检查函数是否失败。 fopen返回 NULL,如果无法打开文件,则设置 errno; mkdir(以及返回int的大多数其他系统调用)返回-1并设置errno。您可以使用 perror 打印出包含错误字符串的消息:

#include <errno.h>
if(mkdir("/path", 0777) < 0 && errno != EEXIST) { // we check for EEXIST since maybe the directory is already there
    perror("mkdir failed");
    exit(-1); // or some other error handling code
}

相关内容

  • 没有找到相关文章

最新更新