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

时间:2012-01-02 11:04:23

标签: c linux

我们将main()声明为

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

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

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

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

6 个答案:

答案 0 :(得分:2)

只需传递指针?

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
}

答案 1 :(得分:1)

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

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中。然后你可以传递这个结构,或者使它静态或全局可用(同样,使用全局变量通常是一个坏主意)。

答案 2 :(得分:1)

  

我可以做的一件事总是通过参数将此值从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.. *? 
}

答案 3 :(得分:0)

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

答案 4 :(得分:0)

如果你真的需要,将它们存储在全局中。

答案 5 :(得分:0)

  

但是如果我想在其他函数的定义中使用它呢?

你的意思是为 main 设置另一组参数?这是不可能的,因为 main 在C标准中被定义为

int main();

int main(int, char*[]);

这是有道理的:第一个参数告诉你在命令行上给出的参数数量,第二个参数包含指向这些参数的指针数组。

您有责任理解这些参数并将其传递给其他功能。如果需要编号,请使用字符串转换功能。