2011-08-27 86 views
0

我正在編程(甚至接近完成)一個CLI程序來測試用戶使用的詞彙表,還是他/她會關心定義的任何一組問題和響應。 ()從一個文件https://github.com/megamasha/Vocab-Tester創建一個全局字符指針

加載和保存到文件被從不同的函數進行處理,主要的兩外側:

在github完整的源。目前他們在同一個源文件中,但我想知道如何做到這一點a)在文件中,b)如果它們最終在單獨的數據庫操作文件中。

我想讓用戶保存到他最近加載的文件,所以我想我的loaddatabase()函數定義一個全局char *到文件名,然後savedatabase()函數可以訪問。

如果我在任何函數之外聲明一個char *,它是隻讀的,並且試圖向它寫一個文件名會導致段錯誤。 如果我在loaddatabase()函數中聲明它,savedatabase()無法訪問它。

將聲明變量static是否允許其他函數訪問它,如果沒有,我如何允許兩個函數訪問相同的char *?

+0

是不是有更好的保存數據庫/ loaddatabase有文件名作爲一個paremter? –

回答

2

您可以通過在一個單一的.c文件中定義它定義全球變量:

char * database; 

並在一個.h文件中聲明它:

extern char * database; 

並通過包括.h文件在每個使用該變量的文件中。

extern關鍵字聲明變量而不定義它。它說編譯器說變量存在於另一個文件中。

因此,對於您的問題,您可以在加載/保存函數的文件中定義char * database,並在主函數的文件中聲明它(extern char * database)。

如果您不想爲文件名分配和釋放內存,您可以使用char database[1024]而不是char * database做同樣的事情。這樣您就可以直接寫入數據庫

+0

保存和加載函數可能總是在同一個文件中,但它們可能並不總是與'main()'在同一個文件中。 我的問題是,他們在不同的功能,但需要訪問相同的變量。 –

+0

我已經更新了答案 – arnaud576875

1

您需要聲明一個字符數組,即char filename [260]。