好吧,假设我有b.exe,它接受一个字符串参数。 我想在a.cpp中使用system:
调用b.exe string s1 = "hallo";
system("b.exe s1");
printf("s1 after invoke = %s",s1);
这是b.cpp中的代码:
int main(string s)
{
s = "hello world";
return 0;
}
我想要的是,当我运行a.exe时,输出将是:
s1 after invoke = hello world
可以这样做吗?基本上,我只是想将一个变量传递给一个exe,但它必须通过引用,而不仅仅是值,因为我希望在我调用的exe中处理和修改该变量。我已经在互联网上搜索了解决方案,但它只为我提供了一个方法来将值传递给exe,而不是通过引用...
任何建议都将非常感谢,但如果可能的话,我希望以上述更正代码的形式提出建议,并包括文件(如果有的话)。谢谢你的帮助:))
答案 0 :(得分:3)
无法在不同进程之间修改命令行参数。只有A.CPP才知道s1
,而且只有B.CPP知道s
。
答案 1 :(得分:1)
不,那是不可能的。另外,main不接受字符串作为参数。
您的字符串s1位于包含a.cpp的进程的地址空间中。您无法通过引用在进程之间传递项目,这是您在将s1传递给进程运行b.exe时尝试实现的。以下是修复语法错误时会发生的情况:b.exe复制字符串的内容,将它们保存在自己的地址空间中。
您需要查看进程间通信以实现类似的功能,但没有简单的方法。
答案 2 :(得分:1)
嗨,大家好,我知道这是一个古老的帖子,但每一点都有帮助:)
使用变量向外部调用的.exe发送参数可以通过使用.c_str()
附加一个用于系统调用的字符串变量来轻松完成。在回读原始问题之后,似乎该人想要从.exe中获取变量,这是不可能的,但是我正在搜索的内容,因为这是第一个返回的Google链接,我认为很多其他人将从中受益......
示例:
//声明一些变量
void runapp();
string ip;
string img;
string tri = "notepad.exe";
string loadexe;
string space = " "; //Just a simple ascii space used between arguments
//编译系统调用的字符串
ip = argv[1];
img = argv[2];
loadexe = tri + space + ip + space + img; // compiled string to use for system call
//调用你的.exe
system(loadexe.c_str());
//完整源代码
#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
void runapp();
string ip;
string img;
string tri = "notepad.exe"; // your .exe to load
string loadexe;
string space = " "; //Just a simple ascii space used between arguments
void main(int argc , char *argv[])
{
ip = argv[1];
img = argv[2];
loadexe = tri + space + ip + space + img;
}else{
//bla bla bla
}
void runapp()
{
system(loadexe.c_str());
}
问候
Alphanu
答案 3 :(得分:0)
不可能这样做。您可以做的最好的事情是按值传递字符串。通过字符串,我的意思是char数组。
事实上,main的官方原型更像是
int main(int argc, char** argv);
如果您希望您的程序使用C ++编译,那么您没有太多选择
答案 4 :(得分:0)
您的main(string)
语法不正确。在C ++中main
可以有两个有效的签名:
int main ();
int main (int argc, char **argv);
其中argc
包含传递给可执行文件的参数个数,argv
指向这些参数的数组。
您可以将多个参数传递给b.exe
并根据该参数编写程序。有关详细信息,您可以搜索main()
的签名及其使用方式。
答案 5 :(得分:0)
一个简单但当然不是最漂亮的解决方案是使用临时文件:
伪代码: 致电A) 在致电B)之前,在A)中完成所需的一切。 从A),输出变量到临时文件。 从A),致电B. 从临时文件导入变量。清除此文件。 做你需要做的一切B) 输出变量从B)到临时文件 出口B) 从临时文件到A)输入变量 做标准输出 退出A)
否则你需要查看消息传递接口(M.P.I.),这不是最简单的解决方案。
答案 6 :(得分:0)
不可能在两个进程之间直接修改变量,但是你可以做类似的事情以获得相同的最终结果。
最简单的方法是使用_popen()。基本思路是:
要将字符串参数从A传递给B,可以将其作为命令行参数传递。 B可以从main()中的argv []数组中读取它。
但要将信息返回给B,您还需要其他一些技巧。 _popen()在内部使用管道,并为你设置很多工作,因此A可以使用fgets()或任何其他基于FILE *的函数从B读取输出.B然后可以执行printf( “你好,世界”); “返回”字符串,A可以从_popen()返回的FILE *中读取该字符串。
有关详细信息和示例,请参阅MSDN page on _popen()。