我只是想写这样的东西:
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]
我尝试了很多不同的方法。怎么写得对吗?
答案 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);