当我在单个函数中打开文件时,它会打开而不会出错。
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
如果这是我传递变量的错误,请解释。指针对我来说是一个弱点。
答案 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
}
}