繁体   English   中英

如何在其他函数中使用cmd传递的参数?

[英]how to use cmd passed arguments in other function?

我们声明main()为

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

并通过命令行传递一些参数并使用它

作为argv[1]argv[2]在main()函数定义中,但是如果我想在其他函数的定义中使用argv[2]怎么办?

我能做的一件事总是通过参数将main()指针char** argv传递给该函数。 但是还有其他方法吗?

只是传递指针?

int main(int argc, char** argv) {
  do_something_with_params(argv);
}

void do_something_with_params(char** argv) {
  // do something
}

或者,如果您的意思是传递单个参数:

int main(int argc, char** argv) {
  do_something_with_argv1(argv[1]);
  do_something_with_argv2(argv[2]);
}

void do_something_with_argv1(char* arg) {
  // do something
}

void do_something_with_argv2(char* arg) {
  // do something
}

为了使数据可用于其他功能,您需要将其作为参数传递,或者通过全局(不推荐)或静态变量使数据可用。

static char** args cmd_args;
static int cmd_arg_count;

int main(int argc, char** argv) {
    cmd_arg_count = argc;
    cmd_args = argv;
    do_work();
    return 0;
}

void do_work() {
    if (cmd_args > 1) {
        printf("'%s'\n", cmd_args[1]);
    }
}

最好的方法是制作一个函数,该函数可以解析命令行参数,并将结果存储在为表示命令行参数而专门定义的struct中。 然后,您可以传递该结构,或使其静态或全局可用(再次,使用globals几乎普遍不是一个好主意)。

我可以做的一件事就是总是通过参数将此值从main()传递给该函数。 但是还有其他方法吗?

不可以。将argcargv传递给其他函数是完全有效的。

int main(int argc, char *argv[])
{
    typedef struct _cmdline_arg_struct {
        // all your command line arguments go here
    }cmdline_arg_struct;

    /* command line arguments - parsed */
    cmdline_arg_struct *pc = (cmdline_arg_struct *) malloc(sizeof(cmdline_arg_struct));

    if (parse_cmdline_args(&pc, argc, argv) == PARSE_FAILURE) {
        usage();
        return 0;
    }

    /* Now go through the structure and do what ever you wanted to do.. *? 
}

您可以在main()中使用代码将值存储在非局部变量中,然后从其他函数中引用这些变量。

如果确实需要,可以将它们存储在全局变量中。

但是如果我想在其他函数的定义中使用该怎么办?

您的意思是main有另一组参数吗? 这是不可能的,因为main在C标准中定义为

int main();

要么

int main(int, char*[]);

这很有意义:第一个参数告诉您命令行上给定的参数数量,第二个参数包含指向这些参数的指针数组。

理解这些参数并将其传递给其他功能是您的责任。 如果需要使它们成为数字,请使用字符串转换函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM