main函数参数

 

原文:http://blog.chinaunix.net/uid-26988130-id-3408456.html

 

在C/C 里面关于主函数main函数的定义时,大多时候我们采用的是int main(void)这种形式,不用带参数;但是标准的定义一般有两种格式:

  1. int main(int argc,char *argv[]);
  2. int main(int argc,char **argv);
参数说明:
argc表示传送主函数参数的个数;
argv[]:指向字符串的指针数组,其中argv[0]是命令本身,也就是程序本身,每个参数用空格隔开;

关于指针数组:表示该数组的所有元素都是指针。

最简单的列举函数参数个数的例子:

  1. #include <stdio.h>
  2. int
  3. main(int argc,char *argv[])
  4. {
  5. while (argc--){
  6. printf("argv[%d]=%s\n",argc,argv[argc]  );
  7. }
  8. return 0;
  9. }
运行结果:

   由于我想在程序里面根据传送数据(实参)的位数分配内存,所有这里我想讲述的是如何获取每一个参数的长度。
首先看看char **argv这个参数:
    argv参数是字符串指针数组,其各元素值为命令行中各字符串(参数均按字符串处理)的首地址指针数组的长度即为参数个数。数组元素初值由系统自动赋予。下面是具体的存储示意图:
下面是一个实例程序:
    功能就获取argv[1]的长度,将argv[1]存放到一个数组里面去,然后打印出来;关键是在于下面红色代码对指针的操作,在移动指针之后,想再次取得argv[1]里面的内容就得将指针移动回来,否则就去到了argv[1]后面内存中的内容,出现错误。

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. int
  5. main(int argc,char **argv)
  6. {    
  7.     int i = 0;
  8.     int strlen = 0;
  9.     int cnt = 0;
  10.     if ( argc != 2 ){
  11.         fprintf(stderr,"please input %s's parameter\n",argv[0]);
  12.         exit(1);
  13.     }

  14.     for ( cnt = 0; (*argv[1]++) != '\0'; )
  15.         cnt++;

  16.     printf ( "argv[1]'s size:%d\n",cnt );

  17.     for ( i = 0; i < cnt+1; i++ )//让指针回到初始位置
  18.         *argv[1]--;

  19.     char *input;
  20.     input = (char *)malloc(cnt*sizeof(cnt));
  21.     memset(input,'\0',sizeof(input));
  22.     sscanf(argv[1],"%s",input);
  23.     printf("input is:%s\n",input);
  24.     for( i = 0; i < 10; i++ ){
  25.         if(input[i] != '\0'){
  26.             strlen++;
  27.             printf("input[%d]=%c\n",i,input[i]);
  28.         }
  29.     }
  30.     printf("the array's sizeis:%d\n",strlen);
  31.     free(input);
  32.     return 0;
  33. }
运行结果:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值