0

我试图从 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++ 程序 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; 

 } 

它有效,但是对于我从 PHP 通过 $q 传递的字符串“Hello world”并没有给我返回字符串(我知道它被定义为双精度,但是一旦我尝试将其更改为字符串或char 变量,代码无法编译)。

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

4

2 回答 2

0

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

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

$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 可能会以不同方式解释的字符。$q在将其传递给 C++ 程序之前必须是干净的。如果 $q 不止一个单词,请使用引号。

C++ 部分(只需尝试以下,然后您可以随时修改)

cout<<argv[1]<<endl;
于 2012-04-09T04:25:29.670 回答
0

尽量不要使用 atoi(argv[i]) 转换最后一个参数。只需将其保留为 argv[i]。

for(int i = 1; i < in-1; i++)
{
    val[i-1] = atoi(argv[i]); 
}
q = argv[i];
于 2012-04-09T04:26:53.053 回答