2012-04-09 162 views
0

我想从PHP传递一个字符串到C++,我设法弄清楚如何传递数字,但它不适用于字母。下面是我有一个PHP的发送PHP字符串到C++

<?php 



$r = 5; 
$s = 12; 
$x= 3; 
$y= 4; 
$q= "Hello World"; 
$c_output=`project1.exe $r $s $x $y $q`; // pass in the value to the c++ prog 
echo "<pre>$c_output</pre>"; //received the sum 
//modify the value in php and output 
echo "output from C++ programm is" . ($c_output + 1); 

?> 

X,Y和q工作这将变量R,S,在C++ PROGRAMM PROJECT1.EXE和它的作品,但问题是,这是行不通的为字符串变量$ q。

下面是我在我的C++ PROGRAMM的代码,很简单:

#include<iostream> 
#include<cstdlib> 
#include<string> 
using namespace std; 
int main(int in, char* argv[]) { 
int val[2]; 
for(int i = 1; i < in; i++) { // retrieve the value from php 
    val[i-1] = atoi(argv[i]); 
} 
double r = val[0]; 
double s = val[1]; 
double x = val[2]; 
double y = val[3]; 

double q = val[4]; // here's the problem, as soon as i try to define val[4] as a string or char, it screws up 
cout << r; 
cout <<s; 
cout << x; 
cout << y; 
cout << q; 

    // will output to php 
return 0; 

} 

它的工作原理,但对于字符串“Hello World”这是我穿过的PHP $ Q不给我字符串返回(我知道它被定义为double,但只要我尝试将其更改为字符串或char变量,代码就不会编译)。

请向我解释我如何解决此问题,以便$ q可以作为字符串处理。仅供参考,我是编程的新手(6个月)。

回答

0

它不适用于字母,因为您在做C++程序中的atoi(..)(它将字符串转换为整数)。

有一些让程序知道该期待什么的方法 - 无论是数字还是字符串。可能是第一个参数可以帮助程序分化,像可能是以下几点:

$c_output = `project1.exe nnsnns 1 2 string1 3 4 string2` 

然后,你可以这样做:

for(int i = 0/*NOTE*/,len=strlen(argv[1]); i < len; i++) { // retrieve the value from php 
    if (argv[1][i] == 'n'){ 
     //argv[2+i] must be an integer 
    }else if (argv[1][i] == 's'){ 
     //argv[2+i] is a string 
    } 
} 

当然,你应该检查是否(strlen(argv[1]) == in-2)

顺便说一句,在上面的C++代码中,val是一个数组,其中包含2个整数;并且您试图访问远远超出指数1


为一个单一字符串传递到C++,你会做类似如下:

$output = `project1.exe $q`; //Read below. 

注意$q必须是单字。没有空格,没有额外的字符,如'|','&',或shell可能解释不同的任何其他字符。在将它传递给C++程序之前,必须先清理一下$q。如果$ q多于一个单词,请使用引号。

C++部分(只是尝试以下方法,那么你可以修改你走)

cout<<argv[1]<<endl; 
+0

我认为我过于复杂,如果我只是有一个PHP变量是一个字符串,只是想传递给C++的字符串?就像在HTML表单中输入“John”一样,我在PHP中创建HTML表单= $ q,然后将$ q传递给C++,但我希望$ q只是一个字符串,我将如何声明?我试着添加你的代码,但它似乎给我无穷无尽。 – 2012-04-09 06:11:06

+0

检查编辑.. – SuperSaiyan 2012-04-09 16:57:53

0

尽量不要使用转换的的atoi最终参数(argv [1])。只要保持它为argv [i]。

for(int i = 1; i < in-1; i++) 
{ 
    val[i-1] = atoi(argv[i]); 
} 
q = argv[i]; 
+0

我得到一个错误,如果我把q = argv [我]那样。也许我只是复杂的整个事情,我不认为我需要for循环。我所拥有的是5个HTML表格,第一个放入数字中的是4个,第五个放入了像“John”这样的字母。我正在尝试第五个输入,我将其声明为HTML变量q以php q = $ q作为字符串转到C++,以便当我像cout << q;它给我的信件“约翰”?如果您只需将字母传递到C++中,您将如何使它成为C++中的字符串? – 2012-04-09 06:02:27