基于命令行传递给主函数参数的应用

2011-01-11 02:47唐婧壹
长治学院学报 2011年2期
关键词:程序段C语言字符

唐婧壹

(山西机电职业技术学院 电子电气工程系,山西 长治 046011)

基于命令行传递给主函数参数的应用

唐婧壹

(山西机电职业技术学院 电子电气工程系,山西 长治 046011)

文章通过对C语言程序设计中命令行传递给主函数参数的讨论,介绍了命令行传递给主函数参数的个数以及类型,然后分析这些参数,并用这些参数作为程序运行中处理的数据解决具体的问题。

主函数;参数;传递;命令行

1 问题的提出

C语言是结构化程序设计语言,程序设计时主要是编写函数和调用函数,设计一个最简单的C语言程序至少编写一个主函数。设计复杂的C语言程序除了编写主函数外,还需用户自己设计函数,调用C语言中的库函数。而无论设计函数还是调用函数时,函数的参数起着重要的作用。主函数的参数是C语言程序编译后,通过命令行进行传递的,在程序运行时起着一定的作用。

2 主函数参数讨论及分析

Windows操作系统升级后,在附件菜单中有一选项是“命令提示符:”,它的作用是当有的操作不需要一个窗口时,切换到此方式下可执行一条命令。这种方式就可通过命令行把参数传递给主函数,也就是C语言编写的程序脱离开C环境的执行。

2.1 主函数参数的个数及类型

在编写C语言程序的主函数时,如果不需要命令行传递的参数,主函数的圆括号是空的;若需要命令行传递的参数,主函数的首部是如下形式:

C语言中规定主函数的参数只有两个,其中第一个必须是整型,它的值是命令行传递给主函数参数的个数;第二个参数必须是字符型的指针数组,每个指针数组按下标顺序指向命令的参数。通过第一个参数的值可知道命令行有几个参数,通过第二个参数,按照字符型指针数组可知道参数是有哪些字符组成。这就为分析传递给主函数的参数提供了方便。

2.2 传递给主函数参数的分析

通过对主函数参数个数及类型的讨论,为分析传递给主函数的参数提供了方便。某年全国计算机等级考试二级C语言笔试中有一道选择题如下:

有以下程序:

假设程序经编译、连接后生成可执行文件exam.exe,若键入以上命令行

exam 123<回车>

则运行结果为:

A.6 B.8 C.3 D.4

此题目考的知识点就是主函数参数的内容,如果知道参数个数argc的值是2,即命令行有两个参数,字符型指针数组元素argv[0]与argv[1]分别指向字符串“exam”和“123”就很容易得出结论。

上述题目为使用命令行传递给主函数的参数起到了抛砖引玉的作用。首先,要把编写好的C程序编译、连接。其次,只要抓住参数的个数及每个参数的首地址,就能对参数作详细的分析。C语言程序中处理的基本数据类型有整型、实型及字符型,但命令行传递给主函数的参数只能是字符型。若主函数处理的数据类型是字符型可直接处理,而处理数据类型是整型和实型时,对于表示整型和实型的字符串就需要通过编写程序将字符型转换为整型和实型。

3 主函数参数的应用

程序设计中离不开给变量赋初值。C语言程序设计中给变量赋初值的方法有输入函数、赋值语句、文件提供等。这些方法给变量赋值有严格的规定,例如输入函数,需要格式说明符与输入行数据的匹配正确地给变量赋初值。再如文件给变量赋初值,需建立相应的数据文件,赋值时还要打开文件和关闭文件。通过命令行传递给主函数的参数,没有这些规定,只需按照数据表示的形式在命令行输入即可。

3.1 命令行参数的类型转换

命令行传递给主函数的参数,只能是字符串。如字符串表示的是整型或实型数据,在参加运算前,就需进行转换,转换程序段如下:

转换为整型数:

以上程序段假设argv[1]所指的字符串表示整型数据,程序中引用变量n就是整型数。

转换为双精度型数据

以上程序段假设argv[1]所指的字符串表示双精度型数据。程序中引用变量s就是双精度的数据。

3.2 命令行参数的应用

计算机数据在介质上传输时,由于信道热噪声或环境热噪声的干扰,使得“1”变成了“0”,“0”变成“1”,这时传输就发生了错误。要判断一个数据块是否存在传输错误,发送端必须在数据中加入一些冗余信息,使数据块中各个比特建立某种形式的关联,接收端通过验证这种关联关系是否存在,来判断数据在传输过程中有没有出错。常用的方法有:奇偶校验码,海明码,循环冗余码(CRC)等。下面介绍以用循环冗余码通过命令行传递给主函数的参数,生成由发送端为传递的二进制数据块加上的冗余信息和接收端判断接收到的信息量否正确。

发送端程序段:(crco.c)

以上程序在C语言环境下编译、连接后生成可执行文件crco.exe,在命令提示符下输入可执行文件所在的磁盘和路径及文件,在加上传输数据块及CRC多项式系数,程序即可显示冗余信息及传输的信息。

命令行举例:

C:>C:debugcrco 10110011 10011

冗余信息=01000,传输的信息=1011001101000

以上程序中的CRC多项式为G(X)=X4+X+1,系数为10011。

接收端程序段:(crci.c)

该程序段与crco.c程序作同样的处理即可,CRC 多项式为 G(X)=X4+X+1。

4 结束语

通过传递给主函数的参数作为程序处理的数据,可以只按照数据形式输入就行,不需要像输入函数那样有严格的规定,而且具有短小精悍的效果,类似于过去的DOS命令。由于经过编译和连接后来运行程序,所以在没有安装C语言环境的计算机上也可直接执行,为程序应用提供了方便。关于传递给主函数参数的讨论还有更复杂的内容,如果处理的问题复杂,参数的个数会增多,也可能根据处理的问题变化,这样参数转换过程中可能用到动态分配内存或更复杂的转换程序,尽管这样,传递给主函数的参数,为程序执行提供了另一片天空。

[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— ),女,吉林榆树人,硕士,主要从事计算机通信研究。

(责任编辑 李学斌)

猜你喜欢
程序段C语言字符
基于WinCC的物料小车控制系统设计与仿真
基于Visual Studio Code的C语言程序设计实践教学探索
字符代表几
数控系统手轮回退功能的研究与实现*
一种USB接口字符液晶控制器设计
图片轻松变身ASCⅡ艺术画
HBM电子称与西门子S7-200系列PLC自由口通讯
基于NC程序段的提高数控加工监控阈值与信号同步的方法*
基于C语言的计算机软件编程
数控铣床FANUC 0i 系统刀具半径补偿系统参数设置解析