我使用下面的代码来打印环境变量。我怀疑主函数中char *argv[]
和char *envp[]
的参数之间是否存在联系。
示例代码: -
#include <stdio.h>
int main(int argc, char *argv[], char *envp[])
{
int index = 0;
while (envp[index])
printf("%s\n", envp[index++]);
}
在删除参数argc和argv后执行程序时,我得到分段错误。 有人请解释一下。!
答案 0 :(得分:1)
调用参数的内容并不重要;只有他们的位置很重要。
如果您删除了argc
和argv
,那么您只有
int main(char *envp[])
这是非法的(因为第一个参数应该是一个整数)。
包含argc
和argv
,但不使用它们有什么问题?
另外,我应该指出envp
不可移植。但它被最广泛使用的C实现所接受。
答案 1 :(得分:1)
main被称为int main(int argc,char ** argv,char ** envp)。
如果删除argc,argv,它将是
int main(char * envp [])
所以envp将被设置为argc,并且当envp [index ++]
时会出现分段错误