2017-02-02 5 views
1

나는 쉘 명령어를 사용하는 것에 익숙하지 않다. PHP에서 디버거 응용 프로그램을 만들고있다. 코드의 논리가 .exe 파일인지 확인하기 위해 .exe 파일의 결과를 확인해야한다. 맞아. 그래서 나는 시험 프로그램을 시험해 보았다.shell_exec 함수에서 인수를 전달할 수 없음

C 프로그램은

#define MAX 128 
int main(char c) 
{ 
const int max=127; 
char array[max]; // char array[10]; 
char string[MAX]; 
scanf("%c",&c); 
array[0] = string[0] = c; 
printf("%c %c\n", array[0], string[0]); 
return 0; 
} 

이이 어떤 값을 반향되지 se.exe

PHP 코드

<?php 
define('STDIN',fopen("php://stdin","r")); 
$cor1=1; 
$op=shell_exec("se.exe H"); 
echo($op); 
if($op=="H H") 
$cor1+=1; 
echo $cor1; 
if($cor1>1) 
{echo "PASSED";} 
else 
{echo "FAILED";} 
?> 

로 컴파일 포함한다.

답변

0

인수가 성공적으로 전달되고 있다고 생각합니다. 인수를 사용하지 않는 C 코드. 사용자 입력을 얻고 실제로 전달되는 인수를 사용하지 않으려면 scanf을 수행하고 있습니다. 인수를 사용하려면 c 코드를 변경해야합니다.

int main(int argc, char *argv[]) { 
    /* ... 
    argv[0] will have the executable name as a char array (char *) 
    argv[1] will have the first command line argument as a char array (char *) 
    argv[1][0] will have the first character of the first parameter that you seem to be interested. 
    ensure that you do proper null check or you will get core dump/application crash 
    */ 
} 
+0

응답 해 주셔서 감사합니다. 나는 명령 줄 인수를 사용하여 시도하고 arguments.It을 사용하여 명령 프롬프트에서 실행 해 보았지만 잘 작동하지 않았습니다. –

+0

#include #include int main (int argc, char * argv) { int rad = argv [1]; printf ("% c", rad); return 1; } @code Warrior –

+0

위의 코드는 명령 프롬프트 또는 PHP exec 함수에서 실행될 때 인수가 무엇인지에 관계없이 동일한 출력을 인쇄합니다. 리턴 된 출력은이 슬래시입니다. –

0

C 프로그램은, 비교 문자열

if($op=="H H") 

제가 제안 아래 줄 바꿈을 포함하지 않는 아래 라인 PHP 코드

printf("%c %c\n", array[0], string[0]); 

새 광고 \ n을 인쇄한다 줄 바꾸기를 포함하여 비교할 PHP 코드를 변경합니다 (문자열을 비교하기 위해 strcmp를 사용합니다. == 연산자를 사용하여 문자열 비교).

if(strcmp($op, "H H\n") == 0) 

희망이 도움이됩니다.

+0

답장을 보내 주셔서 감사합니다. 저는 C 프로그램에서 \ n을 제거하고 strcmp도 사용했습니다. 그러나 그 결과는 바뀌지 않습니다. –

+0

이 프로그램 뿐만이 아닙니다. 저는 다른 몇 가지 시도도했습니다. 그 논쟁은 프로그램 안에 들어 가지 않습니다. 나는 원 프로그램의 영역을 시도했습니다. 출력은 항상 0.000000이었습니다. @ 코드 워리어 –

+0

실행/실행 결과를 복사하여 붙여 넣을 수 있습니까? –