唐婧壹
(山西機電職業(yè)技術學院 電子電氣工程系,山西 長治 046011)
基于命令行傳遞給主函數(shù)參數(shù)的應用
唐婧壹
(山西機電職業(yè)技術學院 電子電氣工程系,山西 長治 046011)
文章通過對C語言程序設計中命令行傳遞給主函數(shù)參數(shù)的討論,介紹了命令行傳遞給主函數(shù)參數(shù)的個數(shù)以及類型,然后分析這些參數(shù),并用這些參數(shù)作為程序運行中處理的數(shù)據(jù)解決具體的問題。
主函數(shù);參數(shù);傳遞;命令行
C語言是結構化程序設計語言,程序設計時主要是編寫函數(shù)和調用函數(shù),設計一個最簡單的C語言程序至少編寫一個主函數(shù)。設計復雜的C語言程序除了編寫主函數(shù)外,還需用戶自己設計函數(shù),調用C語言中的庫函數(shù)。而無論設計函數(shù)還是調用函數(shù)時,函數(shù)的參數(shù)起著重要的作用。主函數(shù)的參數(shù)是C語言程序編譯后,通過命令行進行傳遞的,在程序運行時起著一定的作用。
Windows操作系統(tǒng)升級后,在附件菜單中有一選項是“命令提示符:”,它的作用是當有的操作不需要一個窗口時,切換到此方式下可執(zhí)行一條命令。這種方式就可通過命令行把參數(shù)傳遞給主函數(shù),也就是C語言編寫的程序脫離開C環(huán)境的執(zhí)行。
在編寫C語言程序的主函數(shù)時,如果不需要命令行傳遞的參數(shù),主函數(shù)的圓括號是空的;若需要命令行傳遞的參數(shù),主函數(shù)的首部是如下形式:
C語言中規(guī)定主函數(shù)的參數(shù)只有兩個,其中第一個必須是整型,它的值是命令行傳遞給主函數(shù)參數(shù)的個數(shù);第二個參數(shù)必須是字符型的指針數(shù)組,每個指針數(shù)組按下標順序指向命令的參數(shù)。通過第一個參數(shù)的值可知道命令行有幾個參數(shù),通過第二個參數(shù),按照字符型指針數(shù)組可知道參數(shù)是有哪些字符組成。這就為分析傳遞給主函數(shù)的參數(shù)提供了方便。
通過對主函數(shù)參數(shù)個數(shù)及類型的討論,為分析傳遞給主函數(shù)的參數(shù)提供了方便。某年全國計算機等級考試二級C語言筆試中有一道選擇題如下:
有以下程序:
假設程序經編譯、連接后生成可執(zhí)行文件exam.exe,若鍵入以上命令行
exam 123<回車>
則運行結果為:
A.6 B.8 C.3 D.4
此題目考的知識點就是主函數(shù)參數(shù)的內容,如果知道參數(shù)個數(shù)argc的值是2,即命令行有兩個參數(shù),字符型指針數(shù)組元素argv[0]與argv[1]分別指向字符串“exam”和“123”就很容易得出結論。
上述題目為使用命令行傳遞給主函數(shù)的參數(shù)起到了拋磚引玉的作用。首先,要把編寫好的C程序編譯、連接。其次,只要抓住參數(shù)的個數(shù)及每個參數(shù)的首地址,就能對參數(shù)作詳細的分析。C語言程序中處理的基本數(shù)據(jù)類型有整型、實型及字符型,但命令行傳遞給主函數(shù)的參數(shù)只能是字符型。若主函數(shù)處理的數(shù)據(jù)類型是字符型可直接處理,而處理數(shù)據(jù)類型是整型和實型時,對于表示整型和實型的字符串就需要通過編寫程序將字符型轉換為整型和實型。
程序設計中離不開給變量賦初值。C語言程序設計中給變量賦初值的方法有輸入函數(shù)、賦值語句、文件提供等。這些方法給變量賦值有嚴格的規(guī)定,例如輸入函數(shù),需要格式說明符與輸入行數(shù)據(jù)的匹配正確地給變量賦初值。再如文件給變量賦初值,需建立相應的數(shù)據(jù)文件,賦值時還要打開文件和關閉文件。通過命令行傳遞給主函數(shù)的參數(shù),沒有這些規(guī)定,只需按照數(shù)據(jù)表示的形式在命令行輸入即可。
命令行傳遞給主函數(shù)的參數(shù),只能是字符串。如字符串表示的是整型或實型數(shù)據(jù),在參加運算前,就需進行轉換,轉換程序段如下:
轉換為整型數(shù):
以上程序段假設argv[1]所指的字符串表示整型數(shù)據(jù),程序中引用變量n就是整型數(shù)。
轉換為雙精度型數(shù)據(jù)
以上程序段假設argv[1]所指的字符串表示雙精度型數(shù)據(jù)。程序中引用變量s就是雙精度的數(shù)據(jù)。
計算機數(shù)據(jù)在介質上傳輸時,由于信道熱噪聲或環(huán)境熱噪聲的干擾,使得“1”變成了“0”,“0”變成“1”,這時傳輸就發(fā)生了錯誤。要判斷一個數(shù)據(jù)塊是否存在傳輸錯誤,發(fā)送端必須在數(shù)據(jù)中加入一些冗余信息,使數(shù)據(jù)塊中各個比特建立某種形式的關聯(lián),接收端通過驗證這種關聯(lián)關系是否存在,來判斷數(shù)據(jù)在傳輸過程中有沒有出錯。常用的方法有:奇偶校驗碼,海明碼,循環(huán)冗余碼(CRC)等。下面介紹以用循環(huán)冗余碼通過命令行傳遞給主函數(shù)的參數(shù),生成由發(fā)送端為傳遞的二進制數(shù)據(jù)塊加上的冗余信息和接收端判斷接收到的信息量否正確。
發(fā)送端程序段:(crco.c)
以上程序在C語言環(huán)境下編譯、連接后生成可執(zhí)行文件crco.exe,在命令提示符下輸入可執(zhí)行文件所在的磁盤和路徑及文件,在加上傳輸數(shù)據(jù)塊及CRC多項式系數(shù),程序即可顯示冗余信息及傳輸?shù)男畔ⅰ?/p>
命令行舉例:
C:>C:debugcrco 10110011 10011
冗余信息=01000,傳輸?shù)男畔?1011001101000
以上程序中的CRC多項式為G(X)=X4+X+1,系數(shù)為10011。
接收端程序段:(crci.c)
該程序段與crco.c程序作同樣的處理即可,CRC 多項式為 G(X)=X4+X+1。
通過傳遞給主函數(shù)的參數(shù)作為程序處理的數(shù)據(jù),可以只按照數(shù)據(jù)形式輸入就行,不需要像輸入函數(shù)那樣有嚴格的規(guī)定,而且具有短小精悍的效果,類似于過去的DOS命令。由于經過編譯和連接后來運行程序,所以在沒有安裝C語言環(huán)境的計算機上也可直接執(zhí)行,為程序應用提供了方便。關于傳遞給主函數(shù)參數(shù)的討論還有更復雜的內容,如果處理的問題復雜,參數(shù)的個數(shù)會增多,也可能根據(jù)處理的問題變化,這樣參數(shù)轉換過程中可能用到動態(tài)分配內存或更復雜的轉換程序,盡管這樣,傳遞給主函數(shù)的參數(shù),為程序執(zhí)行提供了另一片天空。
[1]譚浩強,張基溫.C語言程序設計教程[M](第三版).北京:高等教育出版社,2007-07.
[2]田淑清.全國計算機等級考試二級教程C語言程序設計(2010年版)[M].北京:高等教育出版社,2009-09.
[3]馮博琴.計算機網絡與通信[M].北京:經濟科學出版社,2000-03.
Based on the Command Line Passing to the M ain Function Parameters of App lications
TANG Jin-yi
(Shanxi Iustifute of Mechanical and Electrical Engineering,Changzhi Shanxi 046011)
This papers based on C program design command-line transfer to themain function parameters of discussion,introduces the command-line transfer to themain function parameters,then analyzes the number and types of these parameters,and these parameters as program run data processing,solve the specific problem.
main functions;parameters;transmission;command line
TP39
A
1673-2014(2011)02-0051-03
2011—01—19
唐婧壹(1984— ),女,吉林榆樹人,碩士,主要從事計算機通信研究。
(責任編輯 李學斌)