[英]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()传递给该函数。 但是还有其他方法吗?
不可以。将argc
和argv
传递给其他函数是完全有效的。
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.