有很久没有到这里写技术文章了。对不住大家了。不过今天中午想起了一个好消息。今天我发现一个好东西,现在到了极为高兴的地步,呵呵,原来我也可以当黑客!哈哈。
/--------------------------------------------------------------------------
首先向大家介绍的是如何用c++获取当前的路径。其实用c语言也可以做到的,只是将输出语句稍作变换即可。
关键词:main()函数。
main()函数大家不会不熟悉吧,也有相当的人知道main()函数可以带参数的。但是你们是否用到了它的参数获取当前的路径呢?我在网络上查的结果都是使用win32的API函数,这种方法实在是麻烦。我这里就是很简单,而且很容易理解。下面我就把我的想法说一下:
main()函数的原型是“main(int argc, char** argv)”,其中第一个参数是命令行参数的个数。如果是这样的代码:
- #include<iostream>
- usingnamespacestd;
- intmain(intargc,char**argv)
- {
- cout<<argc<<'/n';
- return0;
- }
- 代码1
直接运行时会得到这样的结果:
而使用命令行并加上参数“你好 你好吗”则会得到这样的结果:
main()函数的第二个参数表示的是命令行的指针。这样声明也可以:char* argv[]。再看这样的代码:
- #include<iostream>
- usingnamespacestd;
- intmain(intargc,char*argv[])
- {
- cout<<argv[0]<<'/n';
- return0;
- }
- 代码2
直接运行时会得到这样的结果:
用命令行时再带上参数的时候,如果希望对参数进行操作则可以这样编写代码:
- #include<iostream>
- usingnamespacestd;
- intmain(intargc,char*argv[])
- {
- cout<<argv[0]<<'/n';
- cout<<argv[1]<<'/n';
- cout<<argv[2]<<'/n';
- return0;
- }
- 代码3
使用命令行并加上参数“你好 你好吗”则会得到这样的结果:
注意:
1若直接运行example3,则会出现错误,因为argv[1],argv[2]并不存在。
2用命令行的时候必须将程序复制到相应的目录下。
至此大家有什么想法没有?没错!只需要将字符串argv[0]所表示的路径中去掉应用程序名就好了。难吗?很简单!
大家对指针的掌握怎么样?知道两个指针相减所表示的意思吗?其实我们可以这样想,将字符串argv[0]遍历一遍,查找出最后一个“/”字符,并且置0,这样就相当于将字符串截断,这样只显示出当前路径了!
- #include<iostream>
- usingnamespacestd;
- intmain(intargc,char**argv)
- {
- char*p=&argv[0][0];
- inti;
- for(;*p!=0;p++)
- if(*p=='//')
- i=p-argv[0];
- argv[0][i]=0;
- cout<<argv[0]<<'/n';
- return0;
- }
- 代码4
当然,想保留字符“/”也行,就是将上述代码第十行的“argv[0][i] = 0;”改为“argv[0][i+1] = 0;”即可。
现在请大家看看应用程序的截图吧。
怎么样,很简单吧,其实这仅仅是第一步,好戏在后头呢。(第一讲完)