int main(int argc, char *argv[])
int main(int argc, char *argv[], char *envp[]) // POSIX 擴展
char *argv[] 等價 char **argv,字串指標陣列。argv[0]:程式名稱(可能含路徑,視編譯器/OS 而定)。argv[1] ... argv[argc-1]:用戶實際參數。argv[argc] == NULL(C 標準保證),便於遍歷。char *envp[],環境變數字串陣列,格式 "NAME=VALUE"。NULL 結尾。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=...
...
if (argc != 3) usage();getopt_long() (POSIX) / CommandLineToArgvW (Windows)。FILE* fp = fopen(argv[1], "r");char* home = getenv("HOME");(比遍歷 envp 可移植)。Windows main 為 ANSI。獲取 Unicode 參數需用 wmain 或 GetCommandLineW() + CommandLineToArgvW()。
0 / EXIT_SUCCESS:成功。EXIT_FAILURE:失敗,供 Shell 腳本 $? / %ERRORLEVEL% 判斷。argc/argv 是程式與外部世界交互的標準契約。熟練掌握參數解析、驗證、環境變數獲取,是編寫專業命令列工具的基石。建議使用成熟參數解析庫(如 CLI11, cxxopts, argparse)處理複雜場景。