首页 > 代码库 > 主函数main中变量(int argc,char *argv[ ])的含义

主函数main中变量(int argc,char *argv[ ])的含义

在OpenCV上看到一段处理视频的代码,但是复制到VS下运行运行框总是闪退,查了一下原来应该直接在命令下运行exe文件,主要涉及main函数中argc和argv参数的意义,在这里说一下

argc: 整数,用来统计你运行程序时送给main函数的命令行参数的个数

* argv[ ]: 字符串数组,用来存放指向你的字符串参数的指针数组,每一个元素指向一个参数

argv[0] 指向程序运行的全路径名

argv[1] 指向在DOS命令行中执行程序名后的第一个字符串

argv[2] 指向执行程序名后的第二个字符串

argc 是指命令行输入参数的个数,argv 则存储了所有的命令行参数。假如我的一个程序是video_test.exe,如果在命令行运行该程序(首先应该在命令行下用 cd 命令进入到 video_test.exe 文件所在目录),要处理的文件有 v1.avi、v2.mpg,运行命令为:

video_test.exe v1.avi v2.mpg

那么,argc的值是 3,argv[0]是"video_test.exe",argv[1]是"v1.avi",argv[2]是"v2.mpg"。

也就是说,如果直接在VS下编译运行的话,argc为1 只执行了exe

int main( int argc, char** argv )
{
  //声明IplImage指针
  IplImage* pFrame = NULL; 
  IplImage* pFrImg = NULL;
  IplImage* pBkImg = NULL;
 
  CvMat* pFrameMat = NULL;
  CvMat* pFrMat = NULL;
  CvMat* pBkMat = NULL;
 
  CvCapture* pCapture = NULL;
 
  int nFrmNum = 0;
 
  //创建窗口
  cvNamedWindow("video", 1);
  cvNamedWindow("background",1);
  cvNamedWindow("foreground",1);
  //使窗口有序排列
  cvMoveWindow("video", 30, 0);
  cvMoveWindow("background", 360, 0);
  cvMoveWindow("foreground", 690, 0);
 
 
 
  if( argc > 2 )
    {
      fprintf(stderr, "Usage: bkgrd [video_file_name]\n");
      return -1;
    }
 
  //打开摄像头
  if (argc ==1)
    if( !(pCapture = cvCaptureFromCAM(-1)))
      {
	fprintf(stderr, "Can not open camera.\n");
	return -2;
      }
 
  //打开视频文件
  if(argc == 2)
    if( !(pCapture = cvCaptureFromFile(argv[1])))
      {
	fprintf(stderr, "Can not open video file %s\n", argv[1]);
	return -2;
      }
 

主函数main中变量(int argc,char *argv[ ])的含义