> 백엔드 개발 > C++ > C에서 명령줄 인수 구문 분석

C에서 명령줄 인수 구문 분석

Linda Hamilton
풀어 주다: 2025-01-01 06:03:11
원래의
302명이 탐색했습니다.

Parsing command-line arguments in C

직접 구문 분석:

#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
    char* filepath;
    bool myflag;
    int myvalue;
} CliArgs;

static inline void error(const char* message) {
    fprintf(stderr, "%s\n", message);
    exit(1);
}

CliArgs parse(int argc, char** argv) {
    CliArgs cli_args = { .filepath = 0, .myflag = false, .myvalue = 0 };

    if (argc == 1)
        error("No argument was passed.");

    for (int i = 1; i < argc; ++i) {
        if (!strcmp(argv[i], "--myflag")) {
            cli_args.myflag = true;
            continue;
        }

        if (!strcmp(argv[i], "--myvalue")) {
            ++i;

            if (i == argc)
                error("No value passed for --myvalue.");

            char* str_end;
            cli_args.myvalue = strtol(argv[i], &str_end, 10);

            if (*str_end)
                error("Invalid value for --myvalue.");

            continue;
        }

        if (cli_args.filepath)
            error("Only a single filepath can be given.");
        else
            cli_args.filepath = argv[i];
    }

    if (!cli_args.filepath)
        error("No filepath was passed.");

    return cli_args;
}

int main(int argc, char** argv) {
    CliArgs cli_args = parse(argc, argv);

    printf("%s was called:\n", argv[0]);

    printf(
        "%s is the filepath, myflag is %s and myvalue is %i.\n",
        cli_args.filepath,
        cli_args.myflag ? "true" : "false",
        cli_args.myvalue
    );

    return 0;
}
로그인 후 복사

실행:

$ gcc cli_args.c -o cli_args

$ ./cli_args 
No argument was passed.

$ ./cli_args foo.txt
./cli_args was called:
foo.txt is the filepath, myflag is false and myvalue is 0.

$ ./cli_args foo.txt --myvalue
No value passed for --myvalue.

$ ./cli_args foo.txt --myvalue bar
Invalid value for --myvalue.

$ ./cli_args foo.txt --myvalue 123
./cli_args was called:
foo.txt is the filepath, myflag is false and myvalue is 123.

$ ./cli_args foo.txt --myvalue 123 --myflag
./cli_args was called:
foo.txt is the filepath, myflag is true and myvalue is 123.
로그인 후 복사

위 내용은 C에서 명령줄 인수 구문 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿