簡體   English   中英

如何從main()函數外部訪問argv []?

[英]How to access argv[] from outside the main() function?

我碰巧有幾個函數通過argv[]數組訪問程序的不同參數。 現在,這些函數嵌套在main()函數中,因為編譯器提供了允許這種結構的語言擴展。

我想擺脫嵌套函數,以便可以在不依賴語言擴展的情況下實現互操作性。

首先我想到了一個數組指針,一旦程序啟動,我會指向argv[] ,這個變量將在main()函數之外,並在函數之前聲明,以便它們可以被它們使用。

所以我聲明了如下指針:

char *(*name)[];

哪個應該是指向字符指針數組的指針。 但是,當我嘗試將其指向argv[]我會從不兼容的指針類型獲得對賦值的警告:

name = &argv;

可能是什么問題呢? 你是否想過從main()函數外部訪問argv[]數組的另一種方法?

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

這應該工作,

char **global_argv;


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

int main(int argc, char *argv[]){
  global_argv = argv;
 f(); 
}
#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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM