2012-04-09 4 views
0

PHP에서 문자열을 C++로 전달하려고합니다. 숫자를 전달하는 방법을 알아 냈지만 문자는 사용할 수 없습니다. 여기에 내가 C++을 programm의 만들기 Project1.exe에, x, y 및 Q를,이 변수가 r에 전송 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); 

?> 

작동이야 그 무엇을 그리고 그것은 작동하지만, 문제는 작동하지 않는다는 것입니다 문자열 변수 $ q에 대해. 여기

내가 내 C++ 프로그램에 있으며이 프로그램이 코드, 그것은 간단합니다 :

내가 PHP에서 $ q를 통과 그것은, 그러나에 "Hello World"문자열 작동
#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; 

} 

나에게 제공하지 않습니다 문자열을 다시 (나는 그것이 double로 정의되어 있지만 곧 문자열이나 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 
    } 
} 

.

BTW, 위의 C++ 코드에서 val은 2 정수를 포함하는 배열입니다.

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

참고 : 당신은 당신이 다음과 같이 뭔가를 할 것 ++ 1.


는 C에 하나의 문자열을 전달하기 위해 인덱스를 넘어 많은 액세스하려고 $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]로 유지하십시오.

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

q = argv [i]와 같이 입력하면 오류가납니다.어쩌면 나는 모든 것을 복잡하게 만들었을 것이다. 나는 for 루프가 전혀 필요 없다고 생각한다. 내가 가지고있는 것은 첫 번째 4 자리에 5 개의 HTML 양식을 넣은 것입니다. 다섯 번째 것은 "John"과 같은 글자로 넣었습니다. 나는 HTML 변수 q로 PHP q = $ q로 C++로 이동하기 위해 문자열로 선언 할 때 다섯 번째 입력을 시도합니다. 그래서 내가 cout << q와 같이 갈 때; 그것은 나에게 편지 "John"을 준다? C++에 글자를 전달해야한다면 C++에서 문자열이되도록 어떻게 만들겠습니까? –