#include<stdio.h>
#include<iostream.h>
main(int argc,char *argv[])
{
int n=0,i;
for(i=1;i<argc;i++)
{
n=n*10+*argv[i]-'0';
}
cout<<n<<endl;
}
编译连接后生成可执行文件tt.exe,若运行时输入一下命令行: tt 12 345 678 程序执行后的输出结果是(?) A 12 B 12345 C 12345678 D 136
答案是D:136
tt 12 345 678
tt.exe是程序的名字
后面带3个命令行参数(字符串类型的)
main()函数中的
argc是参数的个数(int类型),也就是3个(12 345 678)
argv是保存参数的二维字符数组
argv[0]指向程序路径: "tt.exe"
argv[1]指向第一个参数:"12"
argv[2]指向第二个参数:"345"
argv[3]指向第三个参数:"678"
显然
*argv[1] = '1'
*argv[2] = '3'
*argv[3] = '6'
程序的运行方法:首先都要编译、链接,生成“.exe”文件,注意此“.exe”文件一般会默认放到“Debug”文件夹中,需要在路径中有Debug,或先到Debug文件夹中取
方法一:
如果该程序名称为echo1.c,则编译、链接后会在Debug文件夹中生成“echo1.exe”文件,通过cd命令,进入echo1.exe所在的Debug文件夹,然后
echo1 12 345 678
就可以了
方法二:
另外,对于《C语言程序设计》谭浩强(第二版)中的"
如果有一个名为file1的文件,它包含以下的main函数:
void main(int argc, char *argv[])
{while(argc-->1)
printf("%s\n",*++argv);
}
在dos命令状态下输入的命令行为file1 china beijing
则执行以上命令将会输出以下信息:
china
beijing
"
关于这个程序的第三行printf("%s\n,*++argv)中的*++argv,argv是数组名,数组名代表数组的首地址,它怎么能够通过自加运算改变值呢?
理解如下:
参考:http://bbs.youkuaiyun.com/topics/190105480
其实
char
* agrv[] 实际上等于
char
** agrv;
测试代码如下:
void main()
{
char **argv = (char**)new char[100];
argv[0] = "11";
argv[1] = "22";
argv[2] = "33";
int i;
for(i=0;i <2;i++)
{
printf( "%s\n ",*(++argv));
}
}
可以参照以下理解:
char (*p)[3]; //这里是指针数组,指针p是指向含有3个元素的数组首地址
char *p[3]; //这里是数组指针,p[3]里面含有3个char*的指针
#include <stdio.h>
void main()
{char *argv[]={ "follow me ", "basic ", "computer design "};
int i;
for(i=0;i <2;i++)
printf( "%s\n ",*++argv);
}
这个程序运行时会出现以下两个错误:
Lvalue required in function main ‘argv’ is assigned a value which is never used
怎么解释呀??
解释:
argv 被声明为一个char*类型的数组
你这里做的操作就相当于直接++数组名,对一个左值进行改变,把char* 替换为char后相当于:
char ch[] = "dasdada";
ch++; // 这肯定是不行的
// 可以改成这样:
void main()
{ char *argv[]={ "follow me ", "basic ", "computer design "};
char **p = argv;
int i;
for(i=0;i <2;i++)
printf( "%s\n", *(p++));
}
谭浩强那个例子举的太烂,容易误解,把char *argv[]当参数传递时,编译器其实压栈的时候帮你做了
char **p = argv;
只不过p还用了原来的argv的名字,此时argv是栈中的一个变量,并强行转换为char **类型,所以可以做++操作。
其实char* agrv[] 实际上等于 char** agrv”
1.当参数传递的时候可以说他们等价,原因上面解释过。
2.单独声明的时候是不一样的,一个是数组名,一个只是一个指针,你可以对一个指针++,但是对数组名却不行。