如何使用 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()
.
看下面的代码!你会明白我想要什么:
#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()
.