我们将main()声明为
int main(int argc, char *argv[])
并通过命令行传递一些参数并使用它
作为main {)函数定义中的argv[1]
,argv[2]
,但如果我想在其他函数的定义中使用它,该怎么办?
我可以做的一件事总是通过参数将指针char** argv
从main()传递给该函数。但还有其他方法吗?
答案 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()传递给该函数。但还有其他方法吗?
没有。将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.. *?
}
答案 3 :(得分:0)
你可以在main()中使用代码将值存储在非局部变量中,然后从其他函数中引用这些变量。
答案 4 :(得分:0)
如果你真的需要,将它们存储在全局中。
答案 5 :(得分:0)
但是如果我想在其他函数的定义中使用它呢?
你的意思是为 main 设置另一组参数?这是不可能的,因为 main 在C标准中被定义为
int main();
或
int main(int, char*[]);
这是有道理的:第一个参数告诉你在命令行上给出的参数数量,第二个参数包含指向这些参数的指针数组。
您有责任理解这些参数并将其传递给其他功能。如果需要编号,请使用字符串转换功能。