2013-09-29 29 views
0

對不起,我有點尷尬,我不得不問這個問題。我似乎無法發現爲什麼我在C錯誤中使用 - >命令。我知道'x-> y'等同於'(* x).y',但由於某種原因,我在我的第一個課程項目中錯誤地使用了它。爲什麼我不正確使用' - >'?我知道這可能是一個簡單的概念錯誤,但不知道爲什麼

爲了透視,我的項目中有28個錯誤; 26是來自這種誤解,兩個來自for循環,並且在C99模式之外有初始聲明 - 這對我來說並不重要,因爲我必須將這些代碼轉移到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 tag the_tag;//The reused tag 

^這是一個全球性的結構體變量

struct header intro; //Bytes 0-19 of the program 

^這是INT主要本地Struct標頭(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

+3

您沒有任何指針。 – SLaks

+1

看起來像你有結構,而不是指向結構的指針。你可以用「。」來引用結構。不是「 - >」。例如intro.endianness –

+1

正如其他人所評論的,您正在使用本地結構,而不是指向結構的指針。爲了說明不同:'struct tag the_tag; the_tag.tag_identifier = 0x10F; struct tag * tag_ptr =&the_tag; tag_ptr-> tag_identifier = 0x10f;' – mkfs

回答

4

a->b相當於(*a).b

由於introstruct header型的,其成員是簡單地用.->將需要(比如說)的訪問intro_ptr變量類型struct header*

相關問題