2013-03-05 58 views
0

我遇到了C概念的問題。我將在前面,這是我的「編程專題:Linux和C」課程的一部分。我試圖讓函數寫入特定的字符串到一個文件(這是一個會計程序,功能寫頁面頁眉和頁腳),我得到一個錯誤。C「參數的類型是'struct file *'」

我的代碼:

#include <stdio.h> 

void writeToFile(FILE dataOut, char content[]) 
{ 
    fprintf(dataOut, content); 
} 

void main() 
{ 
    FILE *dataOut; 
    dataOut = fopen("testWrite.txt", "w"); 
    writeToFile(dataOut, "Leave no bars un-foo'd."); 
} 

該錯誤消息我收到的時候我嘗試編譯:

testWrite.c: In function ‘writeToFile’: 
testWrite.c:5:2: error: incompatible type for argument 1 of ‘fprintf’ 
In file included from testWrite.c:1:0: 
/usr/include/stdio.h:357:12: note: expected ‘struct FILE * __restrict__’ but 
argument is of type ‘FILE’ 
testWrite.c: In function ‘main’: 
testWrite.c:12:2: error: incompatible type for argument 1 of ‘writeToFile’ 
testWrite.c:3:6: note: expected ‘FILE’ but argument is of type ‘struct FILE *’ 

我不知道如何解決這個問題。我試過操縱指針,但它沒有改變錯誤信息。此代碼是我希望我的代碼執行的獨立示例;如果你想看到實際的代碼,請告訴我。這似乎是一種更清晰的方式來表達我正在處理的內容。

+0

它好像你跳槍,使非常基本的錯誤結果;在學習函數之前,嘗試學習對象類型。 – Sebivor 2013-03-05 01:57:29

+0

如果我自己學習,我會慢慢學習,並且學得更深入;然而,我正處於一個時間限制,因此,有時我只需要一個問題的答案,而不必閱讀教科書章節(或等同於互聯網)。就像我在另一個評論中所說的那樣,在我問這個問題之前,我確信我已經嘗試了正確的解決方案。我對對象類型有一個很好的處理方式,但我認爲還有更多的東西不僅僅是指針,所以我問。 – Chance 2013-03-05 18:44:57

回答

5

更改函數接受一個指針,而不是結構本身:

void writeToFile(FILE * dataOut, char content[]) 
+0

你知道,我可以發誓我嘗試過,但我猜不是。無論哪種方式,我都可以在十分鐘內接受你的答案。謝謝你的幫助! – Chance 2013-03-05 01:02:30

4

這裏的問題是,你正試圖將指針傳遞給需要一個非指針值的參數。 writeToFile的第一個參數是FILE,但參數dataOut的類型爲FILE*。爲了使這項工作,你需要讓他們兩個指針值

void writeToFile(FILE* dataOut, char content[])