尽管之前写过一篇关于argc,argv方面的文章(http://blog.csdn.net/carson2005/article/details/5766192)但依然有朋友搞不太清楚。所以,这里,我举两个简单的例子来详细说明,并告诉你一步一步的操作步骤。
例1:打开指定路径下的一个文本文件,读取其内容,并将其写入到指定路径下的另一个文件当中。其中,采用argv来传递输入文件路径和输出文件路径。
参考代码如下:
#include"stdafx.h"
#include"iostream"
#include"fstream"
usingnamespacestd;
int_tmain(intargc,char*argv[])
{
if(argc!=3)//输入参数必须为三个,第一个为test第二个为输入文件的路径,第三个为输出文件的路径
{
cout<<"argumenterror!"<<endl;
cout<<"example:testc:/test.txtd:/testOut.txt"<<endl;
system("pause");
exit(-1);
}
for(inti=0;i<3;i++)
{
cout<<argv[i]<<endl;
}
ifstreamfileIn;
fileIn.open(argv[1],ios::in);//根据用户设定的参数,打开输入文件
if(fileIn.fail())//如果文件打开失败,直接退出
{
cout<<"fileInopenerror:"<<endl;
system("pause");
exit(-1);
}
ofstreamfileOut;
fileOut.open(argv[2],ios::out);//根据用户设定的参数,打开(创建)输出文件
if(!fileOut)
{
cout<<"fileOutopenerror..."<<endl;
system("pause");
exit(-1);
}
charstr[500];
while(!fileIn.eof())
{
memset(str,'\0',500*sizeof(char));
fileIn.getline(str,500);
fileOut<<str<<endl;
cout<<str<<endl;
}
fileIn.close();
fileOut<<"Ihavelearntheusageofargcandargvinmainfunction!ThankstoVitoLee!"<<endl;
fileOut.close();
system("pause");
return0;
}
笔者在E:\VCprograms\路径下面,创建了一个名为test的控制台工程,将上述代码进行编译,在工程所在的文件件下,生成了一个名为test.txt的可执行文件。需要注意的是,因为该main函数利用了main函数中的argc,argv,所以,不能直接鼠标双击来启动。而必须采用命令行的方式进行启动。具体步骤为:
(1)电脑屏幕左下角,开始---->运行--->在出现的对话框中输入“cmd”,如下图所示:
(2)回车,出现了一个类似于dos的界面,如下所示:
(3)由于我们生成的test.ext位于E:\VCprograms\test\Debug,故而,输入:“cdE:\VCprograms\test\Debug”,回车,出现如下的界面:
(4)输入“e:”,回车(需要特别提醒的是,e后面有一个冒号!)出现如下界面:
(5)输入test,后输入文件的绝对路径和输出文件的绝对路径,并以空格进行区分。例如,笔者输入的是:“testc:/test.txtd:/result.txt”。(注意:Argc是argumentcount的简写,也就是参数的个数,很显然,这里的argc=3,而argv显然是一个指针数组,对于笔者的输入而言,argv[0]="test",argv[1]="c:/test.txt",argv[2]="d:/result.txt"。)输入完三个参数之后,回车,如下图所示:
这里,我在程序里面,分别输出了argv[0],argv[1],argv[2],之后,程序按照笔者输入的参数“c:/test.txt”,打开位于c盘下面的test.txt文件,将其内容“It'smyfirstexampleforargcandargvinmainfunction!”读取出来(当然,你的文件里面,可能并不是这句话。。。),并根据笔者输入的参数“d:/result.txt”,在d盘下面创建一个名为result.txt的文件,并将输入文件中读取的内容写入到result.txt输出文件中。就这样,搞定!
例2:结合opencv,用argv来传递参数,从而打开一个图片文件。
参考代码如下所示:
#include"stdafx.h"
#include"cv.h"
#include"highgui.h"
#include"iostream"
usingnamespacestd;
intmain(intargc,char*argv[])
{
if(argc!=2)
{
cout<<"argumenterror..."<<endl;
system("pause");
exit(-1);
}
IplImage*img=cvLoadImage(argv[1]);
cvNamedWindow("img");
cvShowImage("img",img);
cvWaitKey(0);
system("pause");
return0;
}
跟上个例子一样,还是在E:\VCprograms下面创建一个名为test的工程,编译以上代码,在E:\VCprograms\test\Debug下面,生成了一个名为test.exe的可执行文件。下面,让我们从命令行进行启动:
(1)屏幕左下角,开始--->运行,输入"cmd",回车,结果如下:
(2)输入“cdE:\VCprograms\test\Debug”,回车,结果如下:
(3)输入“e:”,回车,结果如下:
(4)输入"test",并输入一个空格,然后,鼠标拖动一个图片文件到cmd.exe上(例如,鼠标拖动c盘下面的test.jpg文件到cmd.exe),结果如下:这也就意味着,用鼠标拖动之后,windows可以自动将该文件的绝对路径添加上去。
(5)回车,如果不出意外,程序将会创建一个名为“img”的窗口,并在其中显示你拖动的图片的内容。
Main函数中的argc,argv就是这么简单。
分享到:
相关推荐
int main(int argc,char *argv[])函数的举例解析
3.实例可以自行改用 1.如有非法,本人无法律责任,由改动代码人负责! 8.需要更多本人作品,查找标签“朱建强” 7.请下载,杀毒后再使用! 4.如果需要联系我请看左边数字! 1.如果不知道这代表什么,那你就放弃计算机吧...
iPhone应用程序是由主函数main启动,它负责调用UIApplicationMain函数,该函数的形式如下所示:int argc,char * argv [],NSString * principalClassName,NSString * delegateClassName);那么UIApplicationMain...
在C语言中,main()函数有三种形式。 1、无参数 #include <stdio> int main(void) { printf("Hello World!\n"); return 0; } 2、有两个参数 习惯上第一个参数是整型argc,保存了外部调用命令的参数个数,第二...
/* 在输入命令行时,把两个文件名一起输入。 将生成的“fputc和fgetc函数使用举例3.exe”文件和file1.c和file2.c放到同一目录下, 在DOS命令工作方式下,进入该...void main(int argc,char *argv[]) ……………… ……
例子(argc和argv的应用) 15 4.递归函数 15 例子(求n!) 15 5.指针,引用与函数 16 例子(函数作引用对象) 16 七.结构,联合和枚举 16 1.概念 16 2.声明 16 3.指针,数组与结构 17 例子(连表) 17 八.类 21 1....
Linux Socket服务器端编程实例 main函数中的参数 在Linux C语言中,main函数通常写作以下形式: int main(int argc,char *argv[]) 其中的两个参数argc和*argv[]是什么含义呢? 8 Linux-Socket-服务器编程实例全文...
getopt_long支持长选项的命令行解析,函数中的参数argc和argv通常直接从main()的两个参数传递而来。optstring是选项参数组成的字符串。 字符串optstring可以下列元素: 1. 单个字符,表示选项, 2. 单个字符后接一个...
QDeclarativeEngine允许配置全局设置应用到所有的QML组件实例中,例如QNetworkAccessManager是用于网络通信以及永久储存的路径。如果应用程序需求在QML组件实例间需求不同的设置只需要多个QDeclarativeEngine。 ...
int main(int argc, char *argv[]) { int sockfd,new_fd; struct sockaddr_in server_addr; struct sockaddr_in client_addr; int sin_size,portnumber; char hello[]="Hello! Are You Fine?\n"; if(argc!=2) { ...
6.4 传给main()的变元argc和argv 6.5 return语句 6.6 递归 6.7 函数原型 6.8 声明变长参数列表 6.9 传统的与现代的函数参数声明 第7章 结构、联合、枚举和用户定义的类型 7.1 结构 7.2 结构数组 7.3 向函数传递结构...
int main(int argc, char *argv[]) { alarm(5); sleep(20); printf(end!\n); return 0; } 运行5秒后,内核向进程发出SIGALRM信息,进程被终止,所以上述程序的结果是: Alarm clock 当然,我们也可以人为定义...
类的实例调用成员函数的原理 其实不管是通过对象实例或指针实例调用,其实底层调用的过程都是一样的,都是把当前对象的指针作为一个参数传递...int main(int argc, char const *argv[]) { Student s(10); int age = s
//main(),西门庆 // //IKindWomen,接口 // //CWangPo,代理 // //CPanJinLian,实际执行...int main(int argc, int* argv[]) { // 西门庆想找潘金莲 DoPanJinLian(); // 西门庆想找贾氏 DoJiaShi(); return 0; }
Qt依赖注入库 快速开始 想象一下,我们有两个名为MyClass1和MyClass2的类,我们在应用程序中定期使用它们。 有很多方法可以做到这一点: 在需要的任何地方创建它们!...int main(int argc, char *argv[]) { QCor
命令行参数是使用 main() 函数参数来处理的,其中,argc 是指传入参数的个数,argv[] 是一个指针数组,指向传递给程序的每个参数。下面是一个简单的实例,检查命令行是否有提供参数,并根据参数执行相应的动作: #...
C/C++ 实现递归和栈逆序字符串的实例 递归函数调用模型 逆序方法 void revers(char *buf){ char *p = buf; if (p == NULL) { ...int main(int argc, const char * argv[]) { char *c = abcde;