在C/C 里面关于主函数main函数的定义时,大多时候我们采用的是int main(void)这种形式,不用带参数;但是标准的定义一般有两种格式:
- int main(int argc,char *argv[]);
- int main(int argc,char **argv);
参数说明:
argc表示传送主函数参数的个数;
argv[]:指向字符串的指针数组,其中argv[0]是命令本身,也就是程序本身,每个参数用空格隔开;
关于指针数组:表示该数组的所有元素都是指针。
最简单的列举函数参数个数的例子:
- #include <stdio.h>
- int
- main(int argc,char *argv[])
- {
- while (argc--){
- printf("argv[%d]=%s\n",argc,argv[argc] );
- }
- return 0;
- }
运行结果:
由于我想在程序里面根据传送数据(实参)的位数分配内存,所有这里我想讲述的是如何获取每一个参数的长度。
首先看看char **argv这个参数:
argv参数是字符串指针数组,其各元素值为命令行中各字符串(参数均按字符串处理)的首地址。 指针数组的长度即为参数个数。数组元素初值由系统自动赋予。下面是具体的存储示意图:
下面是一个实例程序:
功能就获取argv[1]的长度,将argv[1]存放到一个数组里面去,然后打印出来;关键是在于下面红色代码对指针的操作,在移动指针之后,想再次取得argv[1]里面的内容就得将指针移动回来,否则就去到了argv[1]后面内存中的内容,出现错误。
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- int
- main(int argc,char **argv)
- {
- int i = 0;
- int strlen = 0;
- int cnt = 0;
- if ( argc != 2 ){
- fprintf(stderr,"please input %s's parameter\n",argv[0]);
- exit(1);
- }
- for ( cnt = 0; (*argv[1]++) != '\0'; )
- cnt++;
- printf ( "argv[1]'s size:%d\n",cnt );
- for ( i = 0; i < cnt+1; i++ )//让指针回到初始位置
- *argv[1]--;
- char *input;
- input = (char *)malloc(cnt*sizeof(cnt));
- memset(input,'\0',sizeof(input));
- sscanf(argv[1],"%s",input);
- printf("input is:%s\n",input);
- for( i = 0; i < 10; i++ ){
- if(input[i] != '\0'){
- strlen++;
- printf("input[%d]=%c\n",i,input[i]);
- }
- }
- printf("the array's sizeis:%d\n",strlen);
- free(input);
- return 0;
- }
运行结果:
阅读(825) | 评论(0) | 转发(0) |