2012-04-09 8 views
0

PHPから文字列をC++に渡そうとしていますが、数値の受け渡し方法はわかりましたが、文字は使えません。ここで私が持っているものだPHPPHPの文字列を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); 

?> 

のために働くことこれは、変数rを送信しね、X、Y、およびC++プログラムの開発を行うProject1.exeへのqとITは動作しますが、問題はそれが動作しないということです文字列変数$ 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ヶ月)。

答えて

0

C++プログラムでatoi(..)(char-stringを整数に変換する)を実行しているため、文字としては機能しません。

数字か文字列かに関わらず、何を期待するかをプログラムに知らせる手段がありますか。

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

次にあなたができる:(strlen(argv[1]) == in-2)場合はもちろん

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 
    } 
} 

をあなたがチェックすべき最初の引数は、次のことが可能のように、プログラムの分化を助けることができるかもしれません。

上記のC++コードでは、valは2 intを保持する配列です。

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

$qは単一である必要がありますあなたがCに1つの文字列を渡すには1.


インデックスを超えて多くのアクセスしようとしていると++は、次のような何かをするだろうワード。スペースや '|'、 '&'などの余分な文字や、シェルが解釈し易いその他の文字はありません。 $qは、C++プログラムに渡す前にきれいでなければなりません。 $ qが複数の単語の場合は、引用符を使用します。

C++パート(ちょうどあなたが一緒に行くように、あなたが変更することができ、次のことを試してください)

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

私はそれを複雑にしていると思います。ちょうど文字列だったPHP変数を持っていて、その文字列をC++に渡したいのですが? HTML形式の "John"と同様、HTML形式= $ qをPHPで作成し、$ qをC++に渡しますが、$ qを文字列にしたいのですが、どうすれば宣言できますか?私はあなたのコードを追加しようとしましたが、それは私に無限を与えるようです。 –

+0

編集を確認してください.. – SuperSaiyan

0

ATOI(ARGVを[I])を使用して、最後の引数を変換しないようにしてください。ただそれをargv [i]としてください。

+0

私はq = argv [i]のように入力するとエラーになります。たぶん私は全体を複雑にしているだけで、私はforループが必要ないとは思わない。私が持っているものは、5つのHTMLフォームが最初の4つの数字になっています.5つめの数字は "John"のような文字です。私は5番目の入力をしようとしています。これはHTML変数qとしてPHP q = $ qに宣言してC++に文字列として行くため、cout << qのようになります。それは私に手紙 "ジョン"を与える?文字をC++に渡すだけで済む場合、C++の文字列になるように、どうすればいいでしょうか? –

関連する問題