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

C 語言命令行參數 argc/argv 詳解:從文件名傳遞到文件內容打印實戰

     編輯:關於C語言

argc / argv 核心概念

  • argc (argument count):命令行參數總個數,包含程序名自身。
  • argv (argument vector):字符串指針數組,argv[0] 為程序路徑/名稱,argv[1]...argv[argc-1] 為用戶傳入參數,argv[argc] == NULL。

參數解析演示程序

#include 
int main(int argc, char *argv[]) {
    printf("argc = %d\n", argc);
    for (int i = 0; i <= argc; ++i)
        printf("argv[%d] = %s\n", i, argv[i] ? argv[i] : "(null)");
    return 0;
}

編譯為 test,運行 ./test arg_1 arg_2 輸出:

argc = 3
argv[0] = ./test
argv[1] = arg_1
argv[2] = arg_2
argv[3] = (null)

實戰:命令行讀取文件並打印內容

#include 
#include 

int main(int argc, char *argv[]) {
    if (argc != 2) {
        fprintf(stderr, "Usage: %s \n", argv[0]);
        return 1;
    }

    FILE *fp = fopen(argv[1], "r");
    if (!fp) {
        perror("fopen");
        return 1;
    }

    int ch;
    while ((ch = fgetc(fp)) != EOF)
        putchar(ch);

    fclose(fp);
    return 0;
}

關鍵細節與最佳實踐

  1. 參數校驗: 必須檢查 argc,避免 argv[1] 訪問越界。
  2. 錯誤輸出導向 stderr: 使用 fprintf(stderr, ...) 與 perror(),便於管道重定向時區分正常輸出與錯誤信息。
  3. 資源釋放: 正常退出前 fclose(fp);異常返回前亦需關閉。
  4. 二進制文件兼容: 若需處理二進制文件,打開模式改 "rb",輸出用 fwrite 而非 putchar。
  5. 跨平台路徑: Windows 下 argv[0] 可能包含完整路徑,建議用 basename() 或手動提取文件名用於提示信息。

進階擴展:支持多文件與通配符

for (int i = 1; i < argc; ++i) {
    FILE *fp = fopen(argv[i], "r");
    if (!fp) { perror(argv[i]); continue; }
    int ch;
    while ((ch = fgetc(fp)) != EOF) putchar(ch);
    fclose(fp);
}

配合 Shell 通配符 ./print *.txt 可批量處理多文件。

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