【发布时间】:2013-09-29 18:01:43
【问题描述】:
对不起,我有点尴尬,我不得不问这个问题。我似乎无法发现为什么我在 C 中错误地使用了 -> 命令。我知道 'x->y' 等价于 '(*x).y',但由于某种原因,我在我的第一个课程项目中错误地使用了它。
从角度来看,我的项目中有 28 个错误; 26 个来自这个误解,两个来自一个在 C99 模式之外初始声明的 for 循环 - 这对我来说无关紧要,因为我必须将此代码转移到 Unix 机器上在那里编译,所以这些错误不会不会发生。
我得到的具体错误是这样的:
C:\Users\Nick\Documents\School\CS449\Programs\Project 1\EXIF Viewer\main.c|78|error:invalid type argument of '->' (have 'struct tag')|
在 26 个错误中,每一个都是这样的结构,但有些人说(有 'struct header')而另一些人说(有 'struct tag')。
我将在这篇文章的底部包含我的全部代码,但相关的结构声明和调用设置如下:
struct tag the_tag;//The reused tag
^这是一个全局结构变量
struct header intro; //Bytes 0-19 of the program
^这是 int main(argc, **argv){} 中的本地结构头文件
给我这些错误的一些行是:
56: else if(intro->endianness[0] != 'I')
74: if(the_tag->tag_identifier == (0x010F))
78: printf("Manufacturer: %s\n", the_tag->data);
98: else if(the_tag->tag_identifier == (0x08769))
125: else if(tagger->tag_identifier == 0x8827)
有人能解释一下我对 C 中这个解引用器的理解在哪里不正确,以及为什么这些调用会像我期望的那样工作吗?我很困惑,我的谷歌/搜索技能在这件事上一无所获。感谢您的帮助。
这是我的粘贴箱: http://pastebin.com/ck8ThFLG
【问题讨论】:
-
你没有任何指针。
-
在我看来你有结构,而不是指向结构的指针。您可以使用“。”来尊重结构。不是“->”。例如 intro.endianness
-
正如其他人所评论的,您使用的是本地结构,而不是指向该结构的指针。为了说明差异:
struct tag the_tag; the_tag.tag_identifier = 0x10F; struct tag * tag_ptr = &the_tag; tag_ptr->tag_identifier = 0x10f; -
@mkfs:这就是答案。