gpt4 book ai didi

c - 为什么在 argc 和 argv 中传递参数的程序在以不同方式执行时会得到不同的结果

转载 作者:行者123 更新时间:2023-12-05 09:26:11 24 4
gpt4 key购买 nike

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

当我在终端中使用命令 ./test 1 2 3 来执行这个程序时,我得到了结果 ./test 1 2 3 ,但是当我使用函数 execl("/usr/src/test", "1", "2", "3", NULL) 在另一个程序中我得到了结果1 2 3,为什么?

最佳答案

execl() 的语法是:

int execl(const char *path, const char *arg0, ..., /*, (char *)0, */);

所以你有

path = "/usr/src/test"
arg0 = "1"
arg1 = "2"
arg3 = "3"

argN参数放入新进程的argv数组中。

您必须将路径重复为 arg0 才能将其放入 argv[0]

execl("/usr/src/test", "/usr/src/test", "1", "2", "3", NULL)

这不是自动完成的,因为 argv[0] 不需要与程序路径相同,并且在某些情况下它不是(例如,登录 shell通过在 argv[0] 中添加 - 前缀来调用。

关于c - 为什么在 argc 和 argv 中传递参数的程序在以不同方式执行时会得到不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74143926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com