2012-04-09 78 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