[英]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.