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中点击调试,后台执行结果如图所示,
该打印输出的是exe程序存放的位置,这是因为*argv[1]默认存放的是程序文件的地址,而我们无法通过vs的调试窗口给程序输入参数,所以只能打印argv[1].
输入参数只能通过windows的cmd命令窗口进行执行,打开命令窗口,并切换到程序所在的文件夹,在后端输入Project1.exe hello world,执行结果如下图所示:
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]会读到不属于自己的内存范围,发生错误。
win+R,输入cmd来到cmd窗口,切换到exe对应的目录下,运行结果所示,
不属于自己的内存范围,发生错误。
win+R,输入cmd来到cmd窗口,切换到exe对应的目录下,运行结果所示,成功!