将PHP字符串发送到C ++

时间:2012-04-09 04:16:33

标签: php c++

我试图从php传递一个字符串到C ++,我设法弄清楚如何传递数字,但它不适用于字母。这就是我对PHP有用的东西

<?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);

?> 

这将变量r,s,x,y和q发送到C ++ programm project1.exe和IT WORKS,但问题是它不适用于字符串变量$ q。

这是我在C ++程序中的代码,很简单:

#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,但是一旦我尝试将其更改为a字符串或char变量代码只是不编译)。

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

2 个答案:

答案 0 :(得分:0)

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

有一些让程序知道会发生什么的方法 - 无论是数字还是字符串。可能是第一个可以帮助程序区分的参数,可能如下:

$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)

BTW,在上面的C ++代码中,val是一个包含2个整数的数组;并且您试图访问索引1之外的其他内容。


要将一个字符串传递给C ++,您可以执行以下操作:

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

注意$q必须是一个单词。没有空格,没有像'|','&amp;'这样的额外字符,或者shell可能以不同方式解释的任何其他字符。在将其传递给C ++程序之前,$q必须是干净的。如果$ q超过一个单词,请使用引号。

C ++ Part(只需尝试以下操作,然后就可以随着时间进行修改)

cout<<argv[1]<<endl;

答案 1 :(得分:0)

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

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