main函数的第三个参数envp

来源:互联网 发布:知柏地黄丸治耳鸣吗 编辑:程序博客网 时间:2024/06/06 01:51

最简单的main函数是这样的:

int main() {    printf("Hello World!\n");    return 0;}

再后来,需要处理传递的参数,是这样的:

int main(int argc, char *argv[]) {    int i = 0;    for (i=0; i<argc; i++) {        printf("argv[%d]=%s\n", i, argv[i]);    }}

再再后来,在一个大工程中(cups)看到了这个:

// 可执行程序名字为`main`int main(int argc, char *argv[], char *envp[]) {    // 参数    int i = 0;    for (i=0; i<argc; i++) {        printf("argv[%d]=%s\n", i, argv[i]);    }    // TODO: envp参数    while (*envp) {          printf("%s\n", *(envp++));      }}

没有留意envp这个第三个参数,直接传递前两个参数,程序始终不正常。感觉非常奇怪。静下心思考才得知可能是envp造成的。
在终端中如何传递第三个参数呢?需要借助代码,比如如下:

// 可执行程序名字为`execve`int main() {    char *argv[1];    argv[0] = "main";    char *envp[1024];    envp[0]="NAME=Arnold Schwarzenegger";    envp[1]="SEX=male";    execve("./main", argv, envp);    return 0;}

参见这里:https://www.tutorialspoint.com/unix_system_calls/execve.htm