📜  从命令行读取 - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:06:34.543000             🧑  作者: Mango

从命令行读取 - C 编程语言

在C语言中,可以通过从命令行读取参数来实现程序的灵活性和可配置性。本文将介绍如何在C语言中从命令行读取参数。

从命令行读取参数

在C语言中,可以通过main函数的参数argc和argv来从命令行读取参数。其中,argc表示命令行参数的个数,argv是一个字符串数组,包含了命令行参数的内容。下面是一个实例:

#include <stdio.h>

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

运行上面的程序时,可以在命令行中输入参数。例如:

$ ./a.out hello world

输出结果为:

argv[0] = ./a.out
argv[1] = hello
argv[2] = world
解析命令行参数

从命令行读取参数后,还需要解析这些参数才能进行相应的处理。可以使用getopt库函数来解析命令行参数。getopt函数可以识别短选项(单个字母)和长选项(多个字母)。

下面是一个例子:

#include <stdio.h>
#include <unistd.h>

int main(int argc, char* argv[]) {
    int opt;
    while ((opt = getopt(argc, argv, "abc:")) != -1) {
        switch (opt) {
        case 'a':
            printf("option a\n");
            break;
        case 'b':
            printf("option b\n");
            break;
        case 'c':
            printf("option c=%s\n", optarg);
            break;
        default: /* '?' */
            fprintf(stderr, "Usage: %s [-a] [-b] [-c option]\n", argv[0]);
            return 1;
        }
    }

    if (optind < argc) {
        printf("non-option argument(s): ");
        while (optind < argc)
            printf("%s ", argv[optind++]);
        printf("\n");
    }

    return 0;
}

在上面的例子中,下面是有用的代码片段:

int opt;
while ((opt = getopt(argc, argv, "abc:")) != -1) {
    switch (opt) {
    case 'a':
        printf("option a\n");
        break;
    case 'b':
        printf("option b\n");
        break;
    case 'c':
        printf("option c=%s\n", optarg);
        break;
    default: /* '?' */
        fprintf(stderr, "Usage: %s [-a] [-b] [-c option]\n", argv[0]);
        return 1;
    }
}

其中:

  • 第一个参数是argc,表示参数个数。
  • 第二个参数是argv,表示参数内容。
  • 第三个参数是选项字符串,其中的字母表示短选项,冒号表示需要参数。例如,"a"表示选项a,"c:"表示选项c需要参数。
  • getopt函数的返回值是下一个选项的字符,如果遇到了不在选项字符串中的字符,则返回'?'。

更多的使用方法可以参考man getopt。

总结

在C语言中,可以通过从命令行读取参数来实现程序的灵活性和可配置性。通过解析命令行参数,可以方便地处理用户输入的参数。