我想要一个C程序从linux命令行接受参数

时间:2019-12-07 18:32:18

标签: c command-line-arguments

我正在尝试分析作为输入的文本,该文本将根据输入到命令提示符下的参数及其值(以./a.out -a -b 20 -c 3的形式)以任意顺序进行修改和打印,并且它们是可选的,并且不完全不需要输入。如何将这些参数实现到C代码中,以及如何找出它们具有的值? (为了便于说明,可以使用前面提到的-a,-b和-c。)

谢谢。

2 个答案:

答案 0 :(得分:1)

(我不想为此投票,感谢@SteveFriedl。)

由于我从未听说过getopt(),并且为编写这种事情而感到内,请参见下面的示例。

请注意,getopt似乎只接受单字符参数名称。例如,您可以使用-f hello.text,但不能使用-filename hello.txtoptindoptargunistd.h中声明的(ugh)全局变量。

(请注意,通过逐步完成argv[]自己实现这一点并不困难,这可能会产生更灵活的解决方案。)

Shamelessly lifted from Geeks for Geeks

// copied from https://www.geeksforgeeks.org/getopt-function-in-c-to-parse-command-line-arguments/
// Program to illustrate the getopt() 
// function in C 

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

int main(int argc, char *argv[]) 
{ 
    int opt; 

    // put ':' in the starting of the 
    // string so that program can 
    //distinguish between '?' and ':' 
    while((opt = getopt(argc, argv, “:if:lrx”)) != -1) 
    { 
        switch(opt) 
        { 
            case ‘i’: 
            case ‘l’: 
            case ‘r’: 
                printf(“option: %c\n”, opt); 
                break; 
            case ‘f’: 
                printf(“filename: %s\n”, optarg); 
                break; 
            case ‘:’: 
                printf(“option needs a value\n”); 
                break; 
            case ‘?’: 
                printf(“unknown option: %c\n”, optopt); 
                break; 
        } 
    } 

    // optind is for the extra arguments 
    // which are not parsed 
    for(; optind < argc; optind++){  
        printf(“extra arguments: %s\n”, argv[optind]); 
    } 

    return 0; 
} 

然后

./a.out -i -f file.txt -lr -x 'hero'

产生

option: i
filename: file.txt
option: l
option: r
unknown option: x
extra arguments: hero

答案 1 :(得分:1)

通常,您这样声明您的主要功能

int main( int argc, char *argv[] )  {}

然后,当您从命令行调用程序时,

./a.out 1 2 3

argc将是一个包含4(传递的参数数量)的整数

,在argv[1]argv[3]中,您分别具有指向参数1至3的指针。而在argv[0]中,您有一个指向程序名称的指针。