C,C++中如何向main(int argc , char argv[])传递参数

C,C++中如何向main(int argc , char *argv[])传递参数

1.引言

​ 在编写C语言程序中,main函数入口常用的编写格式为,这个也是我们最常用到的格式

int main()

{

.....

return 0;

}

​ 本菜鸡在做项目过程中,用到了一中带参数的main函数,此篇文章进行解析。

2.一个最简单的例子

​ 操作系统:Win 10,IDE:VS2019

​ 首先看一段最简单的代码:

#include <stdio.h>
int main(int argc,char *argv[])
{
	for (int i = 0; i < argc; i++)
	{
		printf(argv[i]);
		printf("\t");
	}
}

​ 首先做一个解释,main中传入的两个参数,argc代表传入参数的个数, char *argv[]代表传入的字符串存放的 字符型指针数组,该数组的第一个元素默认存放程序所运行的exe的位置。

​ 在vs2019中点击调试,后台执行结果如图所示,

C,C++中如何向main(int argc , char argv[])传递参数

​ 该打印输出的是exe程序存放的位置,这是因为*argv[1]默认存放的是程序文件的地址,而我们无法通过vs的调试窗口给程序输入参数,所以只能打印argv[1].

​ 输入参数只能通过windows的cmd命令窗口进行执行,打开命令窗口,并切换到程序所在的文件夹,在后端输入Project1.exe hello world,执行结果如下图所示:

C,C++中如何向main(int argc , char argv[])传递参数

​ cmd中输入Project1.exe代表代表运行这个可执行程序,参数为 hello world,由于hello和world中间用空格进行了间隔,程序会认为我们输入了两个参数,加主函数默认的地址,一共3个参数,这样argc会自动赋值为3,argv[3]中就存放了3个字符串,分别打印便得到了cmd中输出的结果。

3.一个稍微复杂的例子

​ 新建工程,我们在工程中写了三个文件,分别是led.h,led.c和start_stop.c,用来模拟对一个小灯的亮灭的控制过程。

led.h

   #pragma once
   #include <stdio.h>
	void start();
	void stop();

led.c

#include <stdio.h>
#include <string.h>
#include "led.h"
int main(int argc, char* argv[]);
int main(int argc, char* argv[])
{
	if (strcmp(argv[1], "start") == 0)
	{
		start();
		return 0;
	}
if (strcmp(argv[1], "stop") == 0)
    {
        stop();
        return 0;
    }
//info();
return 0;
}

start_stop.c

#include "led.h"
void start()
{
	printf("LED is on");
}
void stop()
{
	printf("LED is off");
}

​ 这个程序的意图是,我们在cmd窗口中启动该程序,用户输入start或者stop的文字就可以模拟控制LED小灯的开关,因为argv[0]字符指针默认指向的是程序的文件地址,因此用户输入的内容被存放argv[1]指向的内存中,然后我们再通过对*argv[1]进行判断,来执行相应的操作。本程序可以在vs中进行编译,但是却无法在vs中调试运行,这是因为在vs中无法输入参数,导致argv[1]会读到不属于自己的内存范围,发生错误。

C,C++中如何向main(int argc , char argv[])传递参数

win+R,输入cmd来到cmd窗口,切换到exe对应的目录下,运行结果所示,

不属于自己的内存范围,发生错误。

win+R,输入cmd来到cmd窗口,切换到exe对应的目录下,运行结果所示,成功!

C,C++中如何向main(int argc , char argv[])传递参数

上一篇:C语言一些需要注意的点


下一篇:sys.argv的详细用法汇总