如何使用 system() 函数在 C++ 中存储 cmd 内存 [C++]

How to Store cmd memory in c++ using system() Function [C++]

看下面的代码!你会明白我想要什么:

#include <iostream>
#include <windows.h>

    using namespace std;

    int main()
    {  
       system("set plock=24865");
       system("echo %plock%"); // I know this will not work.But How to make it work?

     return 0;
    }

好吧,正如你所说,那是行不通的。重要的是要理解 为什么 system 调用会为 运行 和 shell 生成一个子进程,然后您要设置一个环境变量在该子进程中,它立即终止。

所以您的问题可能过于具体,因为它询问如何做到这一点 "using system()";简短的回答是你不能。 (长答案是您可以在注册表中设置环境变量,但只有当您打算将此作为计算机的永久配置更改时,这才是明智的。如果您只是想设置一个变量以供后续 system() 来自同一个程序的调用..)

因此您可以使用 SetEnvironmentVariable() 函数,它将在您当前的进程中设置环境变量(而不是在即将离开的子进程中)。

UPDATE - 在问题的评论线程中提到了另一种选择;但它假定您可以设置变量并立即 运行 any/all 命令立即依赖它。如果可以的话,您可以将所有命令打包到一个 system 调用中,最简单的方法是使用批处理脚本...

每个 system() 调用都会创建一个单独的环境,然后在它 returns 到您的程序时将其销毁。这就是为什么他们不能互相传递信息的原因。

要为您的程序环境设置环境变量,请使用 putenv() 调用,然后使用 getenv() 调用读取它。

system() 调用继承了调用它的程序环境的副本,因此至少您可以使用 putenv() 设置变量并让 system() 读取调用的程序他们。

如果您希望使用 system() 调用外部程序并通过环境变量从中获取信息,那么您无法轻松做到这一点。如果这是您的目标,请考虑使用 fork().