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. }
運行結果:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章