gpt4 book ai didi

c - fopen/fclose 上的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 01:40:24 27 4
gpt4 key购买 nike

我有一个正在创建多个文件的程序。每个正在创建的文件都有一个函数。在每个函数中都有完全相同的代码来创建文件名、打开/创建要写入的文件、设置其权限并在最后关闭文件。我决定制作一个用于打开文件和关闭文件的函数,这样我就可以调用它而不是每次都使用相同的代码。之前的代码在每个函数中看起来如下所示:

void WriteFile1(char *name) {
FILE *file;
char *filename; //This is being malloc'ed because it initially consisted of multiple strings

if (!(filename = malloc(sizeof(char *) * (strlen(name) + 1)))) MallocError();
if (!(file = fopen(filename, "w"))) {
fprintf(stderr, "Unable to open %s. Exiting \n", filename);
exit(1);
}
fchmod(fileno(file), S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH);

//a bunch of fprintf statements here

if (fclose(file)) {
fprintf(stderr, "Error closing %s. Exiting...\n", filename);
exit(1);
}
}

这工作得很好。我没有问题。现在看起来像下面这样:

void WriteFile1() {
FILE *file;

OpenFile(file, "filename.asdf");
//fprintf statements
CloseFile(file, "filename.asdf");
}

void OpenFile(FILE *file, char *name) {
if (!(file = fopen(name, "w"))) {
fprintf(stderr, "Unable to open %s. Exiting... \n", name);
exit(1);
}
fchmod(fileno(file), S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH);
}
void CloseFile(FILE *file, char *name) {
if (fclose(file)) {
fprintf(stderr, "Error closing %s. Exiting...\n", name);
exit(1);
}
}

当我到达 WriteFile1() 中的第一个 fprintf 语句时,它会立即出现段错误。我对 FILE 变量做错了什么吗?看起来它应该像以前一样工作。唯一的区别是文件名字符串的 malloc,我将其作为名称传递并在引号中给出实际值。

谢谢

最佳答案

这段代码是错误的:

void OpenFile(FILE *file, char *name) {
if (!(file = fopen(name, "w"))) {

在这里你只是分配给本地 file 变量。您必须返回 file,这样您的 WriteFile1() 函数才能使用该 FILE*

void WriteFile1() {
FILE *file;

file = OpenFile("filename.asdf");
//fprintf statements
CloseFile(file, "filename.asdf");
}

FILE * OpenFile(char *name) {
FILE * file;
if (!(file = fopen(name, "w"))) {
fprintf(stderr, "Unable to open %s. Exiting... \n", name);
exit(1);
}
fchmod(fileno(file), S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH);
return file;
}

关于c - fopen/fclose 上的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6332354/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com