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

时间:2014-10-18 20:05:24

标签: 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();
}
Getting error: 'g_argv' has an incomplete type

warning: array 'g_argv' assumed to have one element [enabled by default]

我尝试了很多不同的方法。怎么写得对吗?

2 个答案:

答案 0 :(得分:3)

编译器看到你将g_argv声明为一个char指针数组,但是你没有指定多少个。

答案 1 :(得分:3)

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