【普及】用C(C++)语言编写批处理三方程序(一次修正版)
bat吧
全部回复
仅看楼主
level 12
真♂腐坏科技
楼主
1L还是献给我们敬爱的度娘!
2015年05月08日 18点05分
1
level 12
真♂腐坏科技
楼主
自占沙发(插楼可耻,不过也没关系!看看我发表帖子的时间,我料你也没时间插楼!)
2015年05月08日 18点05分
2
level 12
真♂腐坏科技
楼主
致歉
距离上一个关于C语言编写批处理三方工具的教程发布已经有一段时间了,虽然有一定的人支持我的帖子,但是也有一部分细心的人之初我在教程中吃咸的问题与缺漏,在我发发现这些问题后,我发现上次的教程真心做的不成功(你可一看看我发不帖子的时间凌晨3点半左右,精力上就有些问题),在此我要感谢那些指出我问题的人们(我会在本教程中出现问题的地方艾特指出我错误的人)。随后,我将在本次教程中作出修改,并在比较有争议的地方加上我经研究后的理论性内容,但本教程的性质是不会改变的。
ZF
2015年05月08日 18点05分
3
level 12
真♂腐坏科技
楼主
声明
在学习本教程之前,入过你没有一定的C语言基础,我推荐你因该学习一下C语言入门级别的教程,这样会对本教程的学习有叫好的帮助。入过你有足够的C语言的知识,或者从事C语言程序编写的人员,请多为本教程的提出件以或值出存在的问题。在此我还特别欢迎@命幽
和@黑猫崽儿 来爆本帖的菊。同时也跪求
@tmxk0411
和
@超人硬汉
给我一个小小的精!
2015年05月08日 18点05分
4
真♂腐坏科技
@命幽
@黑猫崽儿
(没艾特到。。。)
2015年05月08日 18点05分
EPF_WITH_FRUIT
回复
ʵ����һ����ί
:菊呢
2015年05月09日 02点05分
真♂腐坏科技
回复
��è�̶�
:20了一下是菊。不过可能是第一个菊
2015年05月09日 02点05分
命幽
。。。
2015年05月09日 09点05分
level 12
真♂腐坏科技
楼主
下面步入正题
在你使用批处理的三方工具时,你将三方工具放置到解释器存在的位置或某命令行程序存在的位置中放置三方程序(解释器在windows下这里指c:\windows\system32\cmd.exe,在linux下在/bin/bash。在说明一点本教程的内容也可以应用在linux中,但本教程偏向于在windows下的开发),在命令行下输入参数后,三方程序就会根据参数的不同而体现出不同的结果。比如这里使用了如下一段命令
就会会对IP为192.168.0.1的主机执行3次ping(ping博大精深,有兴趣的可以去了解了解)说道这里,就要从C语言中的函数谈起了。
2015年05月08日 18点05分
5
level 12
真♂腐坏科技
楼主
说到函数(这里指C语言中),这可是在C语言中最跟本的存在。入过没有函数,C语言的场面真是无法想象。在函数中,在函数调用时,大多会有一个值传递的过程,而实现值传递的东西也就是函数中的参数(形参与实参),具体关于C语言函数的内容请产考与C语言的书籍资料。
2015年05月08日 18点05分
6
Misarin
如果
2015年05月09日 00点05分
真♂腐坏科技
回复
�ʼҴ�����
:?
2015年05月09日 02点05分
Misarin
回复
ʵ����һ����ί
:别字。。
2015年05月09日 04点05分
真♂腐坏科技
回复
�ʼҴ�����
:奥。。看到了
2015年05月09日 04点05分
level 12
真♂腐坏科技
楼主
了解C语言的人都知道,一般在主函数中调用其他被声明后的函数,并向其传递参数让其达到某种效果或功能。(套嵌调用也算。这里的主函数指main函数,也有可能是_tmain)程序的过程部分只会在main的范围内执行,而超出main范围的代码是不会执行的。那么问题来了,既然函数都有形参,那么主函数有形参么。答案是有的。而且主函数会接受由外部传递进来的参数,这也就与前面所讲的内容相呼应了。(与5L呼应!!!)
2015年05月08日 18点05分
7
level 12
真♂腐坏科技
楼主
由形参的定义中可以看出main函数中又两个形参。一个整形变量argc,一个字符串数组指针argv
2015年05月08日 18点05分
9
level 12
真♂腐坏科技
楼主
argc用于统计在外部调用该程序时输入的参数数量。例如假定这里有一个file.exe的程序,此时在命令行中输入了file hello word的命令调用了该程序,此时argc的值为3。因为这行命令的操作参数分别为file,hello和word。调用该程序的命令头(也就是file)也被认定为一个操作参数,所以在这一命令中argc的值就为3。
2015年05月08日 18点05分
10
level 12
真♂腐坏科技
楼主
当然C语言是不允许下标越界的,所以设这也就是设定argc的原因。
2015年05月08日 18点05分
11
aiwozhonghuaba
C不是不检查下标是否越界吗.....
2015年05月09日 23点05分
真♂腐坏科技
@aiwozhonghuaba
C是不检查下标越界,但是如果下标越界时程序可能会崩溃。比如读取到无法读取的值等等。但这也就意味着从本质上讲C不能使下标越界。
2015年05月10日 03点05分
level 12
真♂腐坏科技
楼主
接下来就是重点了,argv这个东西我要好好讲讲了,这一块我出现的问题太大了!(后面还会深入的讲解)
2015年05月08日 18点05分
12
level 12
真♂腐坏科技
楼主
在程序获取到才走参数时,每个操作参数都被储存在argv这个数组中(因该是个指针,这里先将他当做成数组吧,稍后会讲解argv的问题),值得注意的是,这是一个二维数组(此时要感谢
@cyxgg
发现这一情况)。说准确点是一个字符串数组。还是上面的例子这里调用了file.exe程序命令还是file hello word,此时操作参数在argv中储存的情况如下。
此时argv[0]的值为file,argv[1][2]的值为e (此时感谢
@SBSTEP
指出我在排列数组起始值的问题)。其他关于数组指针的内容请产考相关书籍。
2015年05月08日 18点05分
13
level 12
真♂腐坏科技
楼主
最后就是返回值了。在批处理中,cmos和choice两个工具想毕大家都不陌生吧。这两个工具都会将程序执行过后的某些有用的值传递到%errorlevel%中,这个值就是有main函数传递出来的。了解C语言的人都知道。Return可以返回数值,在main函数中使用return时,其所返回的值会传递到调用该程序的程序(也就是如果在CMD中调用该程序,则该程序的返回值会被CMD接收,接受的值会被CMD中的%errorlevel%获取)。而且return也可以返回变量或者表达式,这样返回值就变得更加有用了。其他关于return请参阅相关书籍。
注意,这里如果要想让main返回值,就一定要将main的返回值类型改为int(int main,这里感谢 指出的这个问题),而其只能为int(我也不知道为何。。),而且返回值也必须为int类型。不然就会被强制转换!
2015年05月08日 18点05分
14
level 12
真♂腐坏科技
楼主
光说不做是不行的,所以这里上一个小小的程序,自己拿上代码慢慢看!(有已经编译好的程序文件,用记事本就可以打开源码。这是一个基于CMD的程序所以要在CMD的环境下定位到程序所在的文件夹然后执行程序文件。)
ht
tp://pan.baidu
.com/s/1hq
jEGT
I
2015年05月08日 18点05分
15
level 12
真♂腐坏科技
楼主
好了,主要的部分差不多都讲完了,哈欠~~~好困啊。先偷会懒。然后接着探讨最有争议的东西!
char **argv与char *argv[]的关系!
2015年05月08日 18点05分
16
真♂腐坏科技
研究了好长时间,从10点研究到1点。。。
2015年05月08日 18点05分
level 12
真♂腐坏科技
楼主
如果本教程还有什么不妥的地方,请在不妥的楼层指出不妥的地方。必要时
@我
我想说我又把一个ID为“我”的人艾特了。。。
就像
@echo
off
中可怜的echo。。
2015年05月08日 18点05分
17
真♂腐坏科技
二人的吧龄时间都差不多诶!
2015年05月08日 18点05分
level 12
真♂腐坏科技
楼主
大晚上两点半没人从我腰上插楼真爽!!你们只能插我菊了!
2015年05月08日 18点05分
18
真♂腐坏科技
我要偷懒了!
2015年05月08日 18点05分
Misarin
其实bat吧常驻吧友不多。。
2015年05月09日 01点05分
真♂腐坏科技
回复
�ʼҴ�����
:但是放水的很多
2015年05月09日 02点05分
Misarin
回复
ʵ����һ����ί
:吓得我赶紧去首页看了一下。。That doesn't matter.
2015年05月09日 05点05分
level 11
幻魔之瞳
插
2015年05月08日 18点05分
19
真♂腐坏科技
啊!
2015年05月08日 18点05分
level 12
EPF_WITH_FRUIT
2015年05月09日 02点05分
20
真♂腐坏科技
你在20楼爆了我的菊
2015年05月09日 02点05分
EPF_WITH_FRUIT
回复
ʵ����һ����ί
:敢不敢不用这么猥琐的词。。。。
2015年05月09日 02点05分
真♂腐坏科技
回复
��è�̶�
:开了我的后庭。。。
2015年05月09日 02点05分
EPF_WITH_FRUIT
回复
ʵ����һ����ί
:
2015年05月09日 03点05分
level 12
真♂腐坏科技
楼主
啊啊啊,我至现在都没搞懂*argv[]与**argv的关系(稍微搞懂了一点,但是我又觉得有些矛盾)
@tmxk0411
你晓得其中的原因不
早知道我就不在16楼提出探讨这个问题了(反正二者的效果都一样。23333333)
2015年05月09日 02点05分
21
真♂腐坏科技
@超人硬汉
貌似你也知道诶。。
2015年05月09日 03点05分
EPF_WITH_FRUIT
作为形参,这两个用法一样。
2015年05月09日 03点05分
真♂腐坏科技
回复
��è�̶�
:但是我想了解一下原理
2015年05月09日 04点05分
EPF_WITH_FRUIT
回复
ʵ����һ����ί
:前者可以看作由指针构成的数组,而数组使用的时候实际为指向数组的指针,后者是指针的指针,二者用法是一样的
2015年05月09日 07点05分
1
2
尾页