首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C/C++ main 函式參數 argc、argv、envp 完整詳解與實戰範例

     編輯:關於C語言

標準簽名

int main(int argc, char *argv[])
int main(int argc, char *argv[], char *envp[]) // POSIX 擴展

參數詳細說明

argc (Argument Count)

  • 命令列參數總數(含程式名)。
  • 最小值為 1(僅程式名)。

argv (Argument Vector)

  • char *argv[] 等價 char **argv,字串指標陣列。
  • argv[0]:程式名稱(可能含路徑,視編譯器/OS 而定)。
  • argv[1] ... argv[argc-1]:用戶實際參數。
  • argv[argc] == NULL(C 標準保證),便於遍歷。

envp (Environment Pointer)

  • char *envp[],環境變數字串陣列,格式 "NAME=VALUE"。
  • 以 NULL 結尾。
  • 標準 C 不保證作為 main 參數,常用 getenv() / environ 全域變數替代。

實戰範例與輸出

// 編譯為 args.exe
// 執行: args.exe aaaa bbb ccc ddd
#include <stdio.h>
int main(int argc, char *argv[], char *envp[]) {
    printf("argc = %d\n", argc);
    for (int i = 0; i < argc; ++i)
        printf("argv[%d] = %s\n", i, argv[i]);
    printf("\nEnvironment variables:\n");
    for (int i = 0; envp[i]; ++i)
        printf("%s\n", envp[i]);
    return 0;
}

輸出片段:

argc = 5
argv[0] = args.exe
argv[1] = aaaa
argv[2] = bbb
argv[3] = ccc
argv[4] = ddd

Environment variables:
PATH=...
HOME=...
USER=...
...

常見應用模式

  1. 參數數量檢查:if (argc != 3) usage();
  2. 選項解析:手寫或 getopt_long() (POSIX) / CommandLineToArgvW (Windows)。
  3. 文件名參數:FILE* fp = fopen(argv[1], "r");
  4. 環境變數讀取:char* home = getenv("HOME");(比遍歷 envp 可移植)。

進階:Windows Unicode 參數

Windows main 為 ANSI。獲取 Unicode 參數需用 wmain 或 GetCommandLineW() + CommandLineToArgvW()。

返回值慣例

  • 0 / EXIT_SUCCESS:成功。
  • 非零 / EXIT_FAILURE:失敗,供 Shell 腳本 $? / %ERRORLEVEL% 判斷。

總結

argc/argv 是程式與外部世界交互的標準契約。熟練掌握參數解析、驗證、環境變數獲取,是編寫專業命令列工具的基石。建議使用成熟參數解析庫(如 CLI11, cxxopts, argparse)處理複雜場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved