2013-12-23 48 views
-5

當我打印argv值20次時,我得到如下所示的輸出爲什麼?請解釋打印ARGV []的20個值我得到這個輸出請解釋爲什麼?

int main(int argc,char **argv) 
{ 
    int i; 
    for(i=0;i<20;i++) 
     printf("%s\n",argv[i]); 
} 

輸出:

./a.out a 

a 

./a.out 

a 

(null) 

SHELL=/bin/sh 

TERM=xterm-color 

USER=root 

SUDO_USER=hari 

SUDO_UID=501 

SSH_AUTH_SOCK=/tmp/launch-Jm4kQ0/Listeners 

__CF_USER_TEXT_ENCODING=0x0:0:0 

USERNAME=root 

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Applications/gedit.app:/Users/hari/Downloads/gradle-1.9/bin:/usr/X11/bin 
PWD=/Users/hari/Desktop/Cerner/Pointer 
SHLVL=1 
SUDO_COMMAND=/usr/bin/su 
HOME=/var/root 
LOGNAME=root 
LC_CTYPE=UTF-8 
SUDO_GID=20 
DISPLAY=/tmp/launch-DMwOKd/:0 
+3

當超出'argv [argc]'的讀數未定義時的行爲。什麼事情都可能發生。您的系統似乎打印出環境變量;別人可能會崩潰。 – simonc

+2

恭喜你遇到**未定義行爲**! – P0W

+0

argc有一個存在的理由...在C數組中綁定檢查是程序員的責任。你最好學習堆棧溢出的問題,點擊一個未定義的行爲C被獎勵準自動與-1 ...對不起。 –

回答

4

你經歷未定義的行爲:你只被允許訪問argv[0] ... argv[argc],其中最後一項是一個空指針。從外觀上看,環境存儲在argv的陣列之後,但是根本沒有這樣的保證。

相關問題