main函数解析
原文鏈接:http://parisliu2008.blog.163.com/blog/static/95070867200951510412959/
main參數(shù)??
2009-06-15 10:41:29|
每一C 程序都必須有一個main()函數(shù),作為整個程序的入口,可以根據(jù)自己的愛好把它放在程序的任何地方。
在Turbo C2.0啟動過程中,傳遞main()函數(shù)三個參數(shù):argc,argv和env。
* argc: 整數(shù),為傳給main()的命令行參數(shù)個數(shù)。(argument count)
* argv: 字符串?dāng)?shù)組。
在DOS 3.X 版本中,argv[0] 為程序運行的全路徑名;
對DOS 3.0 以下的版本,argv[0]為空串("") 。
argv[1] 為在DOS 命令行中執(zhí)行程序名后的第一個字符串;
argv[2] 為執(zhí)行程序名后的第二個字符串;
...
argv[argc]為NULL。
* env: 字符串?dāng)?shù)組。env[] 的每一個元素都包含ENVVAR=value形式的字符串。其中ENVVAR為環(huán)境變量如PATH或87。value 為ENVVAR的對應(yīng)值如C:\DOS,C:\TURBOC(對于PATH) 或YES(對于87)。
TurboC2.0啟動時總是把這三個參數(shù)傳遞給main()函數(shù),可以在用戶程序中說明(或不說明)它們,如果說明了部分(或全部)參數(shù),它們就成為main()子程序的局部變量。
注意:一旦想說明這些參數(shù),則必須按argc,argv, env的順序,如以下的例子:
main() main(int argc) main(int argc, char *argv[]) main(int argc, char *argv[], char *env[]) 其中第二種情況也是合法的,但不常見,因為在程序中很少有只用argc,而不用argv[]的情況。以下提供一樣例程序EXAMPLE.EXE, 演示如何在main()函數(shù)中使用三個參數(shù): #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!注意:可以用雙引號括起內(nèi)含空格的參數(shù),如本例中的:"argument with blanks"和"Last but one")。
傳送main() 函數(shù)的命令行參數(shù)的最大長度為128個字符 (包括參數(shù)間的空格),這是由DOS 限制的。
任何EXE文件 ,本身并沒有可執(zhí)行能力 ,必須由其他的程序(通常是操作系統(tǒng),但不是絕對的)裝入內(nèi)存 ,把EXE裝入內(nèi)存的程序也為該EXE提供了相應(yīng)的環(huán)境(ENVIRONMENT) ,在這個環(huán)境之中就包括了與主函數(shù) int? argc? ,? char*? argv[] ,相對應(yīng)的實參部分 。
附注:我在實際運行中遇到的問題是:直接運行了.cpp程序,但是發(fā)現(xiàn)沒有任何錯誤,就是輸出結(jié)果異常,不是我們想要的運行結(jié)果,可是又不知道問題在哪,于是上網(wǎng)查找有關(guān)于
main(int argc,char* argv),的相關(guān)問題,上述解釋就是相關(guān)問題的解決方法,但是,我的實際應(yīng)用感想是:首先運行程序,生成Debug文件,找到相關(guān)的.exe路徑,然后,在程序運行命令中輸入這個.exe的路徑,及相關(guān)其他有效值,或有效路徑,這樣才能得到正確的,我們想要的結(jié)果。
總結(jié)
- 上一篇: 麦片怎么吃(燕麦怎么吃才更有效?)
- 下一篇: 剑灵 会员(剑灵会员怎么买划算)