Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从windows c/c+;使用特定参数执行外部程序+;代码_C_Windows_Params - Fatal编程技术网

从windows c/c+;使用特定参数执行外部程序+;代码

从windows c/c+;使用特定参数执行外部程序+;代码,c,windows,params,C,Windows,Params,我想用与调用Program2完全相同的参数从Program2调用Program1。 在Linux中,我可以这样做: int main(char argc, char* argv[]){ execv("./Program1", argv); } 在windows中,我尝试了 但正如第一篇文章所说,存在一个潜在的问题:“argv[0]没有像预期的那样包含模块名”。我确实想向程序1发送正确的argv[0]。我该怎么办?argv[0]是程序本身的名称 你应该做: int main(char argc

我想用与调用Program2完全相同的参数从Program2调用Program1。 在Linux中,我可以这样做:

int main(char argc, char* argv[]){
execv("./Program1", argv); 
}
在windows中,我尝试了


但正如第一篇文章所说,存在一个潜在的问题:“argv[0]没有像预期的那样包含模块名”。我确实想向程序1发送正确的argv[0]。我该怎么办?

argv[0]是程序本身的名称

你应该做:

int main(char argc, char **argv)
{
  char* argvForProgram1[] = { "./Program1", 0 }
  execv(argvForProgram1[0], argvForProgram1);
}
或保留以前的参数:

int main(char argc, char **argv)
{
  char** argvForProgram1 = argv;
  argvForProgram1[0] = "./Program1";
  execv(argvForProgram1[0], argvForProgram1);
}
使用
execve
也更好,因为您保留了以下环境:

int main(char argc, char **argv, char **envp)
{
  char** argvForProgram1 = argv;
  argvForProgram1[0] = "./Program1";
  execve(argvForProgram1[0], argvForProgram1, envp);
}

在Windows上,它叫。我的坏。我以为execv是linux特有的函数,但它是POSIX。