如何从main()函数外部访问argv []?

时间:2010-10-30 08:53:57

标签: c command-line-arguments argv

我碰巧有几个函数通过argv[]数组访问程序的不同参数。现在,这些函数嵌套在main()函数中,因为编译器提供了允许这种结构的语言扩展。

我想摆脱嵌套函数,以便在不依赖语言扩展的情况下实现互操作性。

首先我想到了一个数组指针,一旦程序启动我会指向argv[],这个变量将在main()函数之外并在函数之前声明,这样它就可以了他们使用过。

所以我声明了如下指针:

char *(*name)[];

哪个应该是指向字符指针数组的指针。但是,当我尝试将其指向argv[]时,我会收到来自不兼容指针类型的赋值的警告:

name = &argv;

可能是什么问题?您是否考虑过从argv[]函数外部访问main()数组的另一种方法?

3 个答案:

答案 0 :(得分:6)

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 :(得分:3)

这应该有效,

char **global_argv;


int f(){
 printf("%s\n", global_argv[0]); 
}

int main(int argc, char *argv[]){
  global_argv = argv;
 f(); 
}

答案 2 :(得分:0)

#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);
}