我想知道如何声明字符串数组?我所做的是声明一个指向字符串指针的数组。例如
char *array[]= {"string1","string2","string3"};
我正在阅读有关在Linux中修改环境变量的信息,并偶然发现指针char ** environ(http://www.cs.bham.ac.uk/resources/courses/2005/17423/doc/libc/Environment-Access.html#Environment-Access)。
char ** environ被声明为字符串数组。我认为它应该是一个指针指针。例如。
char *array[]= {"string1","string2","string3"};
environ = array;
我做错了吗?
我还在某处读过char *argv[] = char **argv.
怎么可能?
编辑:我也发现这个帖子非常有帮助。 Should I use char** argv or char* argv[] in C?
答案 0 :(得分:1)
environ = array
对C语言给出的值与数组相同,但是数组有一个指向本地数组的指针。因此,在该语句之后,environ指针将指向您所创建的数组,但未对其先前的内容进行任何更改。
我认为你需要将数组的所有元素strcpy到environ。或者使用api调用setenv(我认为是)
和你的第二个问题。是的,第一对[]
总是可以重写为指针。所以array [] = *数组为array[][5] = (*array)[5]
,*array[] = **array
我希望能帮助你。
答案 1 :(得分:1)
你正在混淆两个不同的东西,实际上对于正在学习的人来说很难知道。函数内部的变量声明和函数参数不是一回事。等价
char*argv[] ~~~ char **argv
成立,因为这是一个参数(main
)。在那里,数组实际上与声明指针一样。
您的作业environ = array
没有错,从语法上讲,编译器会接受它。但由于以下几个原因,它在语义上是错误的:
*environ
。*eviron
。*environ
会
一旦你离开了,就不确定了
功能所以environ
是做这样一个任务的一个特别糟糕的例子。
答案 2 :(得分:1)
在C中,字符串基本上只是一个字符数组。另外,数组名称也代表其地址。
这就是为什么argv []是字符数组的地址(这是一个字符串),而* argv也是字符串的地址(因为它是第一个字符的地址)。