2011-02-07 25 views
0

我的教授在課上引用了這個例子。它基本上是一個版本的Unix的more命令,我不確定它有兩件事情無法理解命令行參數指針

int main(int ac , char *av[]) 
{ 
    FILE *fp; 

    if (ac == 1) 
    do_more(stdin); 
    else 
    while (--ac) 
    if ((fp = fopen(*++av , "r")) != NULL) 
    { 
     do_more(fp) ; 
     fclose(fp); 
    } 
    else 
     exit(1); 
return 0; 
} 

我明白*fp定義文件指針,而* AV []是的命令行參數數組。但是*++av在操作方面意味着什麼?

+1

命名參數`int argc`,`char * argv []`更常見。雖然這個慣例不是強制性的。 – ulidtko 2011-02-07 13:28:01

+0

這個代碼片段來自Bruce Molay的Understanding Unix/Linux Programming,所以我不能責怪那個教授。 – Jason 2011-02-07 13:43:04

回答

8

讀* ++ AV這樣的:

++av // increment the pointer 
*av // get the value at the pointer, which will be a char* 
在這個例子中

,它會打開命令行上傳遞的每個文件。

也:

av[0] // program name 
av[1] // parameter 1 
av[2] // parameter 2 
av[3] // parameter 3 
av[ac - 1] // last parameter 
2

這裏是一個更好的版本,應該做同樣的事情的代碼。希望這會更容易理解。名稱argcargv事實上是標準的,您應該使用它們使代碼對其他程序員更易於理解。

int main (int argc, char *argv[]) 
{ 
    FILE *fp; 
    int i; 

    if (argc == 1) 
    { 
    do_more(stdin); 
    } 
    else 
    { 
    for(i=1; i<argc; i++) /* skip the name of the executable, start at 1 */ 
    { 
     fp = fopen (argv[i], "r"); 
     if(fp == NULL) 
     { 
     /* error message, return etc here */ 
     } 

     do_more(fp) ; 
     fclose(fp); 
    } 
    } 

    return 0; 
}