文章作者:无敌小龙信息来源:邪恶八进制信息安全团队(www.eviloctal.com)注意:本文的版权归无敌小龙和EST共同所有,其他媒体无正式授权谢绝商业转载! 欢乐C语言连载2——带参运行 自欢乐C语言开篇后,半月过去,小龙刹那间杳无音讯!其实,洋洋洒洒的写点东西,开篇不难,难的是能坚持下来,细水长流!(在不少坛子,就看过斑竹或Admin信誓旦旦的也要写点编程带头的文章,可是胎死腹中的十之八九!) 好拉,今天不想灌太多水,让大家丈二和尚--摸不找头脑!小龙之所以有两周米更新了,一是因为学业紧张;剩下的原因,理所当然的就是小龙的懒惰了!^0^!还是切入主题,开始我们今天的学习吧! 在CMD下“工作”过的朋友,应该知道Title这个命令吧,他就是把我们的CMD的标题变化成我们想要的文字!比如,输入:title 无敌小龙。(当然,在输入汉字的时候要首先切换到微软拼音!)然后我们的CMD的标题就变成了如图一的样子!其中的title就可以看做一个在CMD父进程下被执行的二进制程序文件,而“无敌小龙”就可以被看做是参数!这么High的玩法,我们不应该错过!走过,路过,表错过!那么,Follow Me!=800) window.open('http://forum.eviloctal.com/attachment/Mon_0702/10_63683_f6bf27ee2089468.jpg');" src="http://forum.eviloctal.com/attachment/Mon_0702/10_63683_f6bf27ee2089468.jpg" onload="if(this.width>'800')this.width='800';if(this.height>'800')this.height='800';" border=0> 图一 为了让大家能够重复重复再重复的理解我要做滴事,我们再来一例!大家在玩一些Hacker工具的时候,特别是控制台程序的时候,一般都要求输入Scan.exe ip port这样的格式,其中便涉及到了命令行参数的问题!上次给大家演示的程序,就米这个参数的“功能”,今天就给大家补上!不仅是补习,更加是Fashion哦! 大家应该还记得那个main函数吧,他是C语言的门户,就好象我们的家的门一样,只有通过这扇门我们才能“接触”到外界的“万千事物”(比如其他C语言自定义函数等!) 现在我们就要在这个Main函数上动手脚! 还是我一贯的风格,少问为什么,先把给出的简短的代码在编译器中写好,然后测试,与其让自己“心”里什么都“知道”了,还不如能用“手”敲出自己要的代码--即使你不知道他的含义! 在开始我们的Main函数改造前,我们来点前置知识! int argc;大家应该知道了吧,就是声明一个整型的变量。 char *argv;想必,大家也应该略有所知,他就是用来声明一个指针!通常是用来存放一个字符串的(C里米有字符串类型,所以通常是用指针来替代行使这个功能滴!或者用数组,一个一个的赋值,最后添加一个"\0"来表示字符串的结尾!)。表跟我说,他是用来代替数组,提高存储效率的,你的PC不会因为这零点几豪秒的差异,带给你不爽的用户体验。这样说其实是名副其实的蛊惑人心,骗人骗己!只能说明教科书的卫道士! 记住,指针其实米那么伟大!你能把他用在字符串存储上就已经很不错了!先表玩指针的高级用法,仅仅就记住这一个,就够你玩遍大半个C语言世界了! char argv[];就是声明了一个数组,和上面的合起来:char *argv[];就是声明了一个字符形式的数组!这个,我们要好好记住,如果你输入:Scan.exe ip port,那么argv[0]就表示scan.exe,argv[2]就是port了!而刚才的argc在这里就==3了! 好了,晓得了这些,就可以开始我们的“征途”啦! 写好包含的头文件:
Copy code
#include "stdio.h" //包含了我们的标准输入输入文件头。8过,就算你不写这句编译器也8会出错!因为这句在编译过程中是被默认包含了滴! 在来写我们的main函数体:
Copy code
int main(int argc,char *argv[])//在main之前的int可写可不写,因为C默认是返回int类型的! { printf("the number of argument is : %d \n",argc);//上节课的东东,应该还记得吧!如果忘记了,小龙只给你一个忠告:现在就在编译器中敲一遍,如果一遍还不能让你记住,那么,再加一遍! } 在CMD下输入:4--demo.exe 11 22 33 44。如图二中输入的=800) window.open('http://forum.eviloctal.com/attachment/Mon_0702/10_63683_9328aefb1cfa856.jpg');" src="http://forum.eviloctal.com/attachment/Mon_0702/10_63683_9328aefb1cfa856.jpg" onload="if(this.width>'800')this.width='800';if(this.height>'800')this.height='800';" border=0> 图二 最后的显示,如图三=800) window.open('http://forum.eviloctal.com/attachment/Mon_0702/10_63683_8681fb7341a7cce.jpg');" src="http://forum.eviloctal.com/attachment/Mon_0702/10_63683_8681fb7341a7cce.jpg" onload="if(this.width>'800')this.width='800';if(this.height>'800')this.height='800';" border=0> 图三 上面还觉得不过瘾,我们来把刚才我们输入的参数都显示出来,这样才够味! 首先,我们盛上算法!
Copy code
int i for (i=0;i<=(argc-1);i++) //用一个循环,来遍历所有的参数,参数数组argv[]的下标从0开始,到(argc-1)为上限! //其实i<=(argc-1),可以用i
Copy code
star() { int i;//声明一个整型变量,用来存放循环值 for (i=1;i<81;i++) src="http://forum.eviloctal.com/attachment/Mon_0702/10_63683_0d3c2e17c4cf053.jpg" onload="">'800')this.width='800';if(this.height>'800')this.height='800';" border=0> 图五 如果输入的参数不是3个,就输出“sorry!please write the ip and port!”。要证明参数是三个,代码如下:
Copy code
if (argc==3) //参数个数为3 if (argc!=3) //参数个数不为3 如果是3个,就输出你输入的ip和port! if (argc==3) printf("the ip is : %s\n",argv[1]); //怎么输出port你来个“仿拟”就可以了!应该不难吧! 完整的代码如图六=800) window.open('http://forum.eviloctal.com/attachment/Mon_0702/10_63683_b7680eeff5d1996.jpg');" src="http://forum.eviloctal.com/attachment/Mon_0702/10_63683_b7680eeff5d1996.jpg" onload="if(this.width>'800')this.width='800';if(this.height>'800')this.height='800';" border=0> 图六
Copy code
////////////////////////////////////////////////////////////////////////////////////////////#include "stdio.h"#include "conio.h"int main(int argc,char *argv[]){if (argc!=3){star(); //输出一行星星printf("sorry!please write the ip and port!\n"); //这个不解释了,如果你还不知道,那快去复习!star();}else{star(); //还是输出一行星星, 作用:美观!printf("your ip is : %s\n",argv[1]); //输出第二个参数,在C中,数组的下标从0开始,那么下标为1的时候,就代表了第二个单元!printf("your port is: %s\n",argv[2]);star();}getch(); //这个是我的编译器中的一个内置函数,就是让CMD窗口在运行后,不至于消失!}star(){int i;for (i=1;i<81;i++) //这里用到了一个循环语句,不懂的可以先“装”懂,记下来就对了!printf("*");}//////////////////////////////////////////////////////////////////////////////////////////// 今天的课程就这么多吧,不论你觉得是多是少,但如果你能深刻领会并且记住,那就是莫大的收获哦!记住,要使自己不忘却所学的知识,唯一的方法就是要像农民伯伯那样,不间断的对着已经“梳理”耕种过的“田地”施肥除草!对应你的也就是不断的编写程序,不停的用计算机的思维来思考!“只有重复才是最好的记忆”--忘记是哪个名人说过的了!就把这句送给大家吧!*^_^*! 哦,忘记了,在欢乐C语言第一集出来后,EST的水友们说过要多多使用比喻的修辞手法,如果环境允许的话,还要加上仿拟,顶针,回环甚至通感!这次,小龙写起文章来笔走龙蛇,全然忘记了,下次补上!
没有评论:
发表评论