如何打开文件以便在单独的函数中读取而不会出现分段错误?

时间:2015-11-06 22:55:24

标签: c core fault

当我在单个函数中打开文件时,它会打开而不会出错。

void fileOpen(char fileName[]){
    FILE *file;
    file = fopen(fileName, "r");
    if(file != NULL) {
        printf("Successfully opened.");
    }
}

输出:

Successfully opened.

但是,当我尝试将进程移动到单独的函数时,文件会打开,但会出现分段错误。

void fileOpen(FILE file, char fileName[]){
    file = fopen(fileName, "r");
    if(file != NULL) {
        printf("Successfully opened.");
    }
}

void fileStart(){
    FILE *mainFile;
    char name[] = "file.txt";
    fileOpen(mainFile, name);
}

输出:

Successfully opened.
segmentation fault (core dumped) ./executable

如果这是我传递变量的错误,请解释。指针对我来说是一个弱点。

1 个答案:

答案 0 :(得分:1)

1)您希望函数void fileOpen修改其第一个参数,您希望它是FILE *类型。因此,第一个参数应该是指向这样的指针的指针:

void fileOpen(FILE** file, char fileName[]){
    *file = fopen(fileName, "r");
    if(*file != NULL) {
        printf("Successfully opened.");
    }
}

2)在fileStart中,通过提供所需的所有参数,使用正确的类型正确调用您的函数:

void fileStart(){
    FILE *mainFile;
    fileOpen(&mainFile, "someFileName");
}

p.s:你最好让函数fileOpen返回指针而不是修改参数。实际上,"好"做这件事的方法是:

   FILE* fileOpen(char fileName[]){
        FILE* file = fopen(fileName, "r");
        if(file != NULL) {
            printf("Successfully opened.");
        }
        return file;
    }
    void fileStart(){
        FILE* mainFile = fileOpen("someFileName");
        if(mainFile == NULL){
         ... error, do something
        }

    }