2017-08-12 40 views
0

所以Ive得到的如何使用命令行參數讀取二進制文件並在C中打印出來?

struct records { 
    short link; 
    double gate; 
    unsigned char bar; 
    int rest; 
    char rink; 
}; 

一個struct現在我想讀的二進制輸入和使用fread()打印出來。我只是無法弄清楚到底要做什麼。

所以我只帶了

int main(int argc, char* argv[]){ 
} 

所以第一關,你如何打開一個二進制文件?我在網上看到只有使用fopen()時,他們總是指定輸入使用main()和所有的例子。如何使用命令行參數來指定要打開哪個文件?

然後,如何將這些文件讀入struct我創建並打印出來?

任何幫助表示讚賞,感謝你這麼多。

+0

提示1:你忘了''返回0;''語句返回的''結果的main()''。提示2:一旦對提示1進行了更改,在返回語句中設置一個斷點並檢查argc和argv的內容,同時向程序提供不同的命令行參數。 – BitTickler

回答

2

當你運行程序時提供的二進制文件作爲參數的名稱。

argv[0]將是程序本身的名稱和argv[1]中文件的名稱。

由於Jonathan在評論中提到,您必須確保argv[1]在您訪問它之前確實存在,否則會導致錯誤。

喜歡的東西

if(argc<2) 
{ 
    printf("\nError"); 
    return -1; 
} 

應採取照顧。

然後做

FILE *fin=fopen(argv[1], "rb"); 

,然後使用fread()從文件中讀取。

fopen()的第二個參數是其中打開文件的模式。 R和B中的「RB」是指讀出並分別二進制。

至於fread(),首先創建一個變量,說struct records類型a

然後使用

fread(&a, sizeof(a), 1, fin); 

下面我們通過的a地址,這樣讀出的數據將被存儲在那裏。 sizeof(a)表示由fread()讀取的每個塊的大小和1是應該讀取的塊的數量。

fread()將返回讀取成功的塊的數量,在我們的例子中爲1。 如果我們要求讀取的塊數與實際讀取的塊數不相同,則文件結束或發生了一些錯誤。

之後我們可以訪問a的每個元素。

https://www.tutorialspoint.com/c_standard_library/c_function_fread.htm http://pubs.opengroup.org/onlinepubs/009695399/functions/fread.html

+0

非常感謝。我完成了錯誤處理,比如'argc <2',更像'if(fin == null)'。你能否詳細說明'fread()'? –

+0

@AlonzoRobbe我添加了更多的內容。希望能幫助到你。 –

+0

再次感謝。我有幾個問題。首先,'fread'中的'1'是指它從'struct'中讀取的數量,或者''struct'的數量。那麼對於我的'struct',它仍然是'1'還是'5'?其次,要訪問'a'的每個元素並打印它,我只需要爲'a [1]'執行'printf(「%d」,a [0])'等等?最後,我們被告知「用自己的fread'分別讀取每個字段。」這與你所說的有所不同嗎? –

相關問題