原文連結:http://parisliu2008.blog.163.com/blog/static/95070867200951510412959/
main參數
2009-06-15 10:41:29|
每一C 程式都必須有一個main()函數,作為整個程式的入口,可以根據自己的愛好把它放在程式的任何地方。
在Turbo C2.0啟動過程中,傳遞main()函數三個參數:argc,argv和env。
* argc: 整數,為傳給main()的指令行參數個數。(argument count)
* argv: 字元串數組。
在DOS 3.X 版本中,argv[0] 為程式運作的全路徑名;
對DOS 3.0 以下的版本,argv[0]為空串("") 。
argv[1] 為在DOS 指令行中執行程式名後的第一個字元串;
argv[2] 為執行程式名後的第二個字元串;
...
argv[argc]為NULL。
* env: 字元串數組。env[] 的每一個元素都包含ENVVAR=value形式的字元串。其中ENVVAR為環境變量如PATH或87。value 為ENVVAR的對應值如C:DOS,C:TURBOC(對于PATH) 或YES(對于87)。
TurboC2.0啟動時總是把這三個參數傳遞給main()函數,可以在使用者程式中說明(或不說明)它們,如果說明了部分(或全部)參數,它們就成為main()子程式的局部變量。
注意:一旦想說明這些參數,則必須按argc,argv, env的順序,如以下的例子:
main()
main(int argc)
main(int argc, char *argv[])
main(int argc, char *argv[], char *env[])
其中第二種情況也是合法的,但不常見,因為在程式中很少有隻用argc,而不用argv[]的情況。
以下提供一樣例程式EXAMPLE.EXE, 示範如何在main()函數中使用三個參數:
#include <stdio.h>
#include <stdlib.h>
main(int argc,char *argv[],char *env[])
{
int i;
printf("These are the %d command-line arguments passed to main:
", argc);
for(i = 0; i <= argc; ++i)
printf("argv[%d]:%s
", i, argv[i]);
printf("
The environment string(s)on this system are: \n
");
for(i = 0; env[i] != NULL; ++i)
printf(" env[%d]:%s
", i, env[i]);
}
如果在DOS 提示符下,按以下方式運作:
EXAMPLE.EXE: C:example first_argument "argument with blanks" 3 4 "last butone" stop!
注意:可以用雙引号括起内含空格的參數,如本例中的:"argument with blanks"和"Last but one")。
傳送main() 函數的指令行參數的最大長度為128個字元 (包括參數間的空格),這是由DOS 限制的。
任何EXE檔案 ,本身并沒有可執行能力 ,必須由其他的程式(通常是作業系統,但不是絕對的)裝入記憶體 ,把EXE裝入記憶體的程式也為該EXE提供了相應的環境(ENVIRONMENT) ,在這個環境之中就包括了與主函數 int argc , char* argv[] ,相對應的實參部分 。
附注:我在實際運作中遇到的問題是:直接運作了.cpp程式,但是發現沒有任何錯誤,就是輸出結果異常,不是我們想要的運作結果,可是又不知道問題在哪,于是上網查找有關于
main(int argc,char* argv),的相關問題,上述解釋就是相關問題的解決方法,但是,我的實際應用感想是:首先運作程式,生成Debug檔案,找到相關的.exe路徑,然後,在程式運作指令中輸入這個.exe的路徑,及相關其他有效值,或有效路徑,這樣才能得到正确的,我們想要的結果。