【问题标题】:C fopen() error: incompatible types when assigning to type ‘FILE’ from type ‘struct FILE *’ [closed]C fopen()错误:从“struct FILE *”类型分配给“FILE”类型时不兼容的类型[关闭]
【发布时间】:2014-01-09 19:36:23
【问题描述】:

我目前正在制作一个图像处理程序,进展顺利,但突然出现了一些fopen() 错误。在我以前的版本中(没有动态分配的数组,没有结构)没关系,char name[50]fopen(name, "a") 中使用,它工作得很好,但现在我根本无法让它工作。无论我输入fopen(),它都不会编译。这是完整的错误描述:

obsluga.c:30:8:错误:分配给类型时类型不兼容 来自‘struct FILE *’类型的‘FILE’ plik2=fopen(name, "a");

代码片段(我可以发布更多,但应该无关紧要)

char name[50]; 
plik2=fopen(name, "a");  

我真正想要的是传递给char *output 中包含的fopen() 文件名,该文件名具有适当的结构,但遗憾的是,即使是最简单的方法现在也不起作用。

【问题讨论】:

  • 看来plik2 的类型是FILE 而不是FILE *
  • 提供完整但最小的示例。
  • 您到底是如何得出结论认为 plik2 的声明无关紧要的?
  • 顺便说一下,错误消息中对struct FILE 的引用有点牵强附会。 FILE 类型显然恰好是您的特定实现中称为 struct FILE 的东西的 typedef。它可以在其他实现中以不同方式定义。

标签: c struct char fopen


【解决方案1】:

要得到错误,您必须编写如下内容:

FILE plik2;

而不是正确的:

FILE *plik2;

FILE * 视为不透明类型。你总是写FILE *(几乎总是;偶尔,你可能会使用FILE **),从不写FILE

【讨论】:

  • 您的意思是“将FILE 视为不透明类型”吗?
  • 一个或两个;不要戳FILE * 指向的内容;在任何地方使用FILE *;永远不要使用FILE。我想我的意思是“使用FILE * 作为类型”(从讨论中省略不透明)。我不相信我的用法是错误的;你的选择不会错。
  • @KeithThompson 可能将 both 视为不透明。永远不要取消引用 FILE*,例如...
  • @Roddy:同意。 FILE* 不是完全不透明的;我们知道这是一个指针。但是使用它的代码不应将其视为一个,尤其不应尝试取消引用它。 (我想,一个符合但不正当的实现可能fopen()返回一个POSIX风格的整数描述符强制转换为FILE*;可移植代码不应该在这样的实现下崩溃。)跨度>
  • 哇,我花了几乎一整天的时间阅读指针、字符数组和类似的东西.. 仍然值得。非常感谢!
猜你喜欢
  • 2021-02-10
  • 2021-01-17
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 2016-03-25
  • 1970-01-01
相关资源
最近更新 更多