前言
在旧版本的IDE中新建一个C/C++源文件,你可能会看到这种样子的main函数
int main(int argc,char* argv[])
{
return 0;
}
上面这个argc,argv到底有什么用呢?
分析
初探类型
先看argv,可以理解成它是一个string数组(char数组可以理解成一个string,为了方便叙述都用string来表示),而argc是一个int类型
int argc,char* argv[]
这两者的关系是:argc表示argv中存放string的个数,默认的argc=1,因为argv[0]就是你当前程序的路径。
执行下面代码:
#include<iostream>
using namespace std;
int main(int argc,char* argv[])
{
cout<<"argc: "<<argc<<endl;
cout<<"argv: "<<argv[0]<<endl;
return 0;
}
看到结果:
文件IO
看到这里你肯定明白了,argc是argv中存放string的数量,有了这个我们就可以遍历这个数组了
现在我们有了文件路径,可以干什么?没错 IO
首先我们新建一个文本文件叫MyTXT,里面输入This is a test.
运行如下代码,你会看到…
#include<iostream>
#include<fstream>
using namespace std;
int main(int argc,char* argv[])
{
ifstream Open;
//这是个示例。在工程中IO务必检查文件是否存在
Open.open(argv[1]);
cout<<"argc: "<<argc<<endl;
const int len=100;
char str[len];
while(Open.getline(str,len))
{
cout<<str;
}
return 0;
}
什么也没有发生…因为我们没有读取文件。
怎么读取文件?打开win+R,输入cmd,打开我们熟悉的黑框框,首先切换目录,然后运行process MyTXT.txt(请不要输入process.cpp,这样会打开它而不是运行它。)
成功了!可以看到argc为2,说明argv里面有两个string
多个文件IO
编写代码
#include<iostream>
#include<fstream>
using namespace std;
int main(int argc,char* argv[])
{
ifstream *OpenAry=new ifstream[argc-1];
for(int i=1;i<argc;i++)
{
OpenAry[i-1].open(argv[i]);
}
cout<<"argc: "<<argc<<endl;
for(int i=0;i<argc;i++)
{
cout<<"name: "<<argv[i]<<endl;
}
const int len=100;
for(int i=0;i<argc-1;i++)
{
char str[len];
while(OpenAry.getline(str,len))
{
cout<<str<<endl;
}
}
return 0;
}
新建一个txt,名字为MyTXT2,修改内容为This is A test.
输入下图命令,成功读取两个文本中的内容。
自定义格式
下面玩点好玩的,重命名刚刚两个文件后缀为mtxt
点击文件更改打开方式为我们的process.exe程序
然后在cmd中运行命令,发现可以成功读取。
这样你就可以自定义文件格式,然后使用你的程序来IO了~~
总结
argc,argv可以使程序接受命令行参数,更方便的IO