如何将char*argv[]放入全局变量

如何将char*argv[]放入全局变量,c,C,我只是想写一些这样的东西: u64 get_env(char *argv[]); char* g_argv[]; static char * Sample () { return (char*)get_env(g_argv); } int main(int argc, char *argv[]) { g_argv = argv; Sample(); } 我试过很多不同的方法。如何正确编写?编译器看到您将g_argv声明为一个字符指针数组,但您没有指定数量 int main

我只是想写一些这样的东西:

u64 get_env(char *argv[]);

char* g_argv[];

static char * Sample ()
{
  return (char*)get_env(g_argv);
}

int main(int argc, char *argv[])
{
   g_argv = argv;
   Sample();
}

我试过很多不同的方法。如何正确编写?

编译器看到您将g_argv声明为一个字符指针数组,但您没有指定数量

int main(int argc, char *argv[])
不管它看起来像什么,argv不是一个数组;数组不是C中的第一类对象,不能传递给函数,只能传递给它们的地址。因为argv是一个参数,所以它实际上是指向指针的指针。出于这个原因,我认为最好是说实话,用实际行动

int main(int argc, char** argv)
这与上面的完全相同。这种语言上的混乱导致你

char* g_argv[];
你说这是一个指针数组,没有说数组有多大,但这不是你想要的;您需要指向以下几个指针中第一个的指针:

char** g_argv;
这解决了你问的问题,但我想知道这个声明:

u64 get_env(char *argv[]);
当名称和用法清楚地表明它返回char*时,为什么要将其声明为返回u64?事实上,你根本不应该在这里声明它。。。它应该在头文件中声明,该头文件指定包含get_env的API。希望该头文件将其声明为返回char*,然后您可以从

return (char*)get_env(g_argv);

对不起,我试过char**g_argv;接下来我犯了一个错误,认为cast不起作用。是的,它在头文件中,我刚把它移到这里,所以你们可以看到,u64是可以的,我认为不是我的代码,它可以产生不同的类型,不同的参数。无论如何,谢谢你的澄清。
return (char*)get_env(g_argv);