2017-05-20 1 views
0

J'écris un programme c qui obtient comme entrées l'exécution du nom de fichier et le txt nom de fichier. Mon programme doit exécuter le fichier exe avec les chaînes du fichier txt au format suivant: ./exemple ./fileName. J'ai lu chaque ligne du fichier texte avec la fonction fgets(). J'utilise la fonction system() pour exécuter l'exe à partir de mon code. ceci est mon codeExécution du programme à partir du code c en utilisant le système

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

#define READSIZE 100 


int main(int argc,char *argv[]){ 

    FILE * src; 
    //char path[] ="home/omriz/playGround/Cyber/ex4/1/prog1strings.txt";  
    char buffer[READSIZE]; 
    int i; 
    int status; 
    char *result = malloc(strlen(argv[2]) + strlen(buffer)+2);//+1 for the zero-terminator 


    if(argc < 3){ 
     printf("prototype error <exe file to run><strings txt file txt>\n"); 
     return -1; 
    } 
    printf ("exe file path is : %s \n",argv[1]); 
    printf ("src file path is : %s \n",argv[2]); 

    src = fopen(argv[2],"r"); 

    while(!(feof(src))){ 
     fgets(buffer,READSIZE,src); 
     printf("string read from txt file is: %s\n",buffer); 
     *result = malloc(strlen(argv[2])+strlen(buffer)+2); 
     strcpy(result,argv[1]); 
     strcat(result," "); 
     strcat(result, buffer); 
     printf("result is %s\n",result); 
     printf("before sys command\n"); 
     status = system(result); 
     printf("status value is %d\n",status); 
    } 
    printf("we reached the end of the string.txt file\n"); 
    free(result); 
    fclose(src); 
} 

Le problème est que le programme sort avant qu'il ne lire toutes les lignes du fichier texte et je ne sais pas pourquoi.

le fichier exe que je cours à partir de mon code devrait retourner la valeur de chaîne comme "Vrai" ou "Faux" comment puis-je attraper ces valeurs en utilisant la fonction system()?

merci.

+0

Vous avez un problème avec l'allocation de mémoire de résultat. Je pense qu'à la place * result = malloc (strlen (argv [2]) + strlen (buffer) +2); vous vouliez écrire result = .... (maintenant vous surchargez les 4 premiers octets avec le pointeur vers la nouvelle mémoire de résultat) Autre chose: êtes-vous sûr d'avoir affecté suffisamment de mémoire à la commande? – sborpo

Répondre

1
*result = malloc(strlen(argv[2])+strlen(buffer)+2); 
résultat

est un char *, c'est donc une erreur (il suffit de retirer le *)

edit: un peu de explaination

malloc retourne un vide *, alors là, vous définissez le 1 octet pointé par résultat au retour du pointeur par malloc

+0

Merci, cela a aidé et résolu le premier problème. maintenant le programme lit toutes les chaînes du fichier texte. Encore j'attends de l'aide pour obtenir la valeur des chaînes de l'exe que je cours avec le système. –

+0

vous devez créer un tuyau, voir [ici] (https://stackoverflow.com/questions/7292642/grabbing-output-from-exec) –