"FILE *" 类型的实参与 "FILE **" 类型的形参不兼容
时间: 2023-07-08 20:43:14 浏览: 174
形参和实参-javascript课件和实例
这个错误通常是因为传递给函数的参数类型与函数声明中的参数类型不匹配所导致的。
在 C 语言中,如果你需要在函数中对文件进行操作,通常需要使用 `FILE *` 类型的指针作为函数参数。如果你想要在函数中修改文件指针(例如打开一个新的文件),你需要将文件指针的地址传递给函数,因此需要使用 `FILE **` 类型的指针。
例如,以下是一个声明和定义不匹配的函数:
```c
#include <stdio.h>
void open_file(FILE *fp) {
fp = fopen("output.txt", "w"); // 打开一个新文件
}
int main() {
FILE *fp;
open_file(fp); // 调用函数
fprintf(fp, "Hello, world!\n"); // 写入文件,此处会发生错误
fclose(fp); // 关闭文件
return 0;
}
```
在这个例子中,我们定义了一个函数 `open_file()`,它接受一个 `FILE *` 类型的指针作为参数,并试图打开一个新文件。然而,在 `main()` 函数中调用 `open_file()` 函数时,我们传递了一个未初始化的 `FILE *` 类型的指针 `fp`,这会导致 `fprintf()` 调用时发生错误,因为 `fp` 指向的文件并没有被打开。
要解决这个问题,我们需要将 `open_file()` 函数修改为接受一个 `FILE **` 类型的指针,并将文件指针的地址传递给函数。例如:
```c
#include <stdio.h>
void open_file(FILE **fp) {
*fp = fopen("output.txt", "w"); // 打开一个新文件
}
int main() {
FILE *fp;
open_file(&fp); // 传递文件指针的地址
fprintf(fp, "Hello, world!\n"); // 写入文件
fclose(fp); // 关闭文件
return 0;
}
```
在这个例子中,我们将 `open_file()` 函数修改为接受一个 `FILE **` 类型的指针,并在函数中使用 `*fp` 访问文件指针。在 `main()` 函数中,我们将 `fp` 指针的地址传递给 `open_file()` 函数,这样就可以在函数中打开一个新文件,并将文件指针指向该文件。然后,在 `fprintf()` 函数中,我们可以使用 `fp` 指针写入文件,最后关闭文件即可。
阅读全文