2017-02-02 1 views
1

Je suis assez nouveau pour utiliser les commandes shell. Je fais une application de débogage dans php.J'ai besoin de vérifier le résultat des fichiers .exe pour vérifier si la logique du code est Alors j'ai essayé un programme de test.Impossible de passer des arguments dans la fonction shell_exec

Le programme C est

comprennent

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

Ceci est compilé comme se.exe

PHP CODE

<?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";} 
?> 

Cela ne fait l'écho des valeurs.

Répondre

0

Je pense que l'argument est réussi. Le code c n'utilise pas l'argument. Il fait scanf pour obtenir l'entrée de l'utilisateur et n'utilise pas vraiment l'argument qui est passé. Vous devez changer le code c pour utiliser l'argument.

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

Merci pour la réponse. J'ai essayé d'utiliser des arguments de ligne de commande et j'ai même essayé de les exécuter dans l'invite de commande en utilisant des arguments. Cela n'a pas fonctionné aussi bien. –

+0

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

+0

le code ci-dessus lorsqu'il est exécuté à partir de l'invite de commande ou de la fonction exec php imprime la même sortie, quel que soit l'argument. La sortie retournée est/.juste cette barre oblique. –

0

Le programme c est l'impression d'une nouvelle ligne \ n dans la ligne ci-dessous

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

Dans le code php, la chaîne de comparaison n'inclut pas nouvelle ligne dans la ligne ci-dessous

if($op=="H H") 

Je suggère vous changez le code php pour comparer, y compris newline (utilisez strcmp pour comparer les chaînes N'utilisez pas == operator pour comparer les chaînes)

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

Espérons que cela aide.

+0

merci pour la réponse.J'ai retiré le \ n du programme C et également utilisé strcmp. Mais le résultat ne change pas. –

+0

pas seulement ce programme.J'ai essayé quelques autres aussi. L'argument ne rentre pas dans le programme. J'ai essayé la zone d'un programme de cercle. La sortie était toujours 0.000000. @Code Warrior –

+0

Pouvez-vous copier et coller le résultat de votre exécution/exécution? –