如何从 main() 函数外部访问 argv[]?
Posted
技术标签:
【中文标题】如何从 main() 函数外部访问 argv[]?【英文标题】:How to access argv[] from outside the main() function? 【发布时间】:2011-05-02 18:13:29 【问题描述】:我碰巧有几个函数通过argv[]
数组访问程序的不同参数。现在,这些函数嵌套在 main()
函数中,因为编译器提供了语言扩展来允许这样的结构。
我想摆脱嵌套函数,以便在不依赖语言扩展的情况下实现互操作。
首先我想到了一个数组指针,一旦程序启动,我将指向argv[]
,这个变量将在main()
函数之外并在函数之前声明,以便它们可以使用。
所以我声明了这样一个指针如下:
char *(*name)[];
它应该是一个指向字符指针数组的指针。但是,当我尝试将其指向 argv[]
时,我会收到来自不兼容指针类型的赋值警告:
name = &argv;
可能是什么问题?您是否想到了从main()
函数外部访问argv[]
数组的另一种方法?
【问题讨论】:
【参考方案1】:char ** name;
...
name = argv;
会成功的:)
你看char *(*name) []
是一个指向char 指针数组的指针。而您的函数参数 argv 具有指向 char 的指针的类型指针,因此 &argv 具有指向指向 char 的指针的类型指针。为什么?因为当您声明一个函数以获取数组时,编译器与获取指针的函数相同。也就是说,
void f(char* a[]);
void f(char** a);
void f(char* a[4]);
是完全相同的等价声明。不是说数组是指针,而是作为函数参数它是
HTH
【讨论】:
+1 是第一个答案和迄今为止解释错误的唯一答案。 感谢您的解释!我使用argv
作为char *argv[]
,所以我一开始就想到了一个数组指针。
@Johannes, @Sergi:谢谢,我希望 C/C++ 书籍能够更加强调数组和指针的差异。这些经常混淆......【参考方案2】:
这应该可行,
char **global_argv;
int f()
printf("%s\n", global_argv[0]);
int main(int argc, char *argv[])
global_argv = argv;
f();
【讨论】:
【参考方案3】:#include <stdio.h>
int foo(int pArgc, char **pArgv);
int foo(int pArgc, char **pArgv)
int argIdx;
/* do stuff with pArgv[] elements, e.g. */
for (argIdx = 0; argIdx < pArgc; argIdx++)
fprintf(stderr, "%s\n", pArgv[argIdx]);
return 0;
int main(int argc, char **argv)
foo(argc, argv);
【讨论】:
以上是关于如何从 main() 函数外部访问 argv[]?的主要内容,如果未能解决你的问题,请参考以下文章
如何从库函数中访问 c++ 中的 argc 和 argv
C语言 main函数参数 argc,argv 用处,控制台应用程序模板2