C++Primer 6.2.5||6.25练习
题目:编写一个main函数,令其接受两个实参。把实参的内容连接成一个string对象并输出出来。
解:
首先按照书上写出如下程序。
#include<iostream>
#include<string>
using std::string;
using std::cin;
using std::cout;
using std::endl;
int main(int argc,char **argv)
{
string str; //直接默认初始化str,不能用使用0或者nullptr来初始化str,否则会出现未定i的错误。
for(auto i=1;i!=argc;++i) //因为argv[0]是exe文件的名称,所以我们从i=1开始。
str+=argv[i];
cout<<str<<endl;
return 0;
}
写完程序后,但是我产生了一个疑问,main函数的实参从哪里来呢?程序执行是由main函数开始的,最后又由main函数结束整个程序。所以我们不能像调用其他函数一样来调用main函数,而且main函数只能由系统调用。
那么如何向main函数传递实参呢?
仔细看书,书上有一句话:(p196)有时我们确实需要给main函数传递实参,一种常见的情况是用户通过设置一组选项来确定函数所要执行的操作。
那在哪里设置选项呢,也就是在哪里输入实参呢,方法如下。
1、
2、右击这个有两个+号的选项,即P197_6_25,看你怎么命名。然后选择最下面的属性。
3、最后选调试,看到命令参数这一行了吧,一般没有设置过的,这一行是空的。这时候往命令参数这一行写你想添加的C风格字符串。如书上的pro -d -o ofile data0 都可以。
最后执行的结果。
当然,如果从i=0开始的话,会把程序名称也打印出来。如下
这个程序名并不是我们输入进去的,而是argv[0]自动保存的。
但是这里还有一个疑问,为什么我只是输入几个C风格字符串,而没有输入它的数组的大小,实参也能传递给函数呢?
嗯,这里并没有找到答案。可能系统会自动计算数组的大小,然后将实参传递给函数把。