main函数解析
原文鏈接: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:\n\n", argc); for(i = 0; i <= argc; ++i) printf("argv[%d]:%s\n", i, argv[i]); printf("\nThe environment string(s)on this system are: \\n\n"); for(i = 0; env[i] != NULL; ++i) printf(" env[%d]:%s\n", 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的路徑,及相關其他有效值,或有效路徑,這樣才能得到正確的,我們想要的結果。
總結
- 上一篇: 麦片怎么吃(燕麦怎么吃才更有效?)
- 下一篇: Boost::filesystem的使用