程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 關於main函數的參數,argc,argv的內部機制

關於main函數的參數,argc,argv的內部機制

編輯:關於C語言

偶爾對main函數的參數感興趣,寫了個程序驗證。

int main(int argc,char **argv)

首先,解釋兩點:

第一 、系統將參數列表,即我們在shell下輸入的命令,存儲到一個一維字符數組中,而且用戶是可修改的,肯定沒存在常量區。

第二 、argv實際上是一個char*argv[],字符指針數組,元素個數現在不清楚,至少有argc個,還有一些其他的,例如HOSTNAME,SELINUX_ROLE_REQUESTED,TERM,SHELL,HISTSIZE,SSH_CLIENT,SELINUX_USE_CURRENT_RANGE,QTDIR,QTINC,SSH_TTY,SVN_EDITOR等,

 

然後根據參數列表中的空格,劃分各個參數,各個參數的首地址存儲到argv[i]中,然後讓*(argv[i]-1)=0,即用\0代替原來的空格,這樣可以打印出各個參數。

下面貼出我的程序,大家可以自己試驗一下。

/*argcargv.c*/

#include <stdio.h>

#include <string.h>

int main(int argc,char ** argv)

{

  int i;

  for(i=0;i<argc/*20,可以自己設定一個大於argc的值,看看argv到底有多少個元素*/;i++)

  {

    printf("%p,%s",argv[i],argv[i]);

    printf("$\n");

  }

  printf("\n");

  strcpy(argv[0],"meilidezhongguo,nihao!");

  for(i=0;i<argc,i++)

  {

    printf("%p,%s",argv[i],argv[i]);

    printf("$\n");

  }

  printf("\n");

}

程序運行: ./a.out abc 123 def 456 hello 789 world

我的電腦運行結果如下:

0xbff64758,./a.out$

0xbff64760,abc$

0xbff64764,123$

0xbff64768,def$

0xbff6476c,456$

0xbff64770,hello$

0xbff64776,789$

0xbff6477a,world$

(nil),(null)$

.......

.......

.......

.......

 

0xbff64758,meilidezhongguo,nihao!$

0xbff64760,hongguo,nihao!$

0xbff64764,guo,nihao!$

0xbff64768,nihao!$

0xbff6476c,o!$

0xbff64770,hello$

0xbff64776,789$

0xbff6477a,world$

 

也可以用

strncpy(argv[0],"meilidezhongguo,nihao!",28);

代替strcpy(argv[0],"meilidezhongguo,nihao!");

試試,

還可以看出strncpy,拷貝了22個字符,strlen("meilidezhongguo,nihao!");剩下額6個字符補上\0.

理解限制,只能補充這些,下次有了新理解,再完善!

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved