2017-05-20 17 views
0

Ich schreibe c-Programm, die als Eingaben fileName und txt fileName erhalten. Mein Programm sollte die EXE-Datei mit den Zeichenfolgen aus der TXT-Datei im nächsten Format ausführen: ./Exename ./fileName .. Ich lese jede Zeile aus der Textdatei mit fgets() -Funktion. Ich verwende system() -Funktion, um die Exe von meinem Code zu starten. dies ist mein CodeAusführen von Programm von c-Code mit System

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

Das Problem ist, dass das Programm beendet, bevor es alle Zeilen aus der Textdatei gelesen und ich weiß nicht, warum.

Die Exe-Datei, die ich aus meinem Code ausführen, sollte String-Wert wie "True" oder "False" Wie kann ich diese Werte unter Berücksichtigung der System() -Funktion zu fangen?

danke.

+0

Sie haben ein Problem mit der Ergebnisspeicherzuordnung. Ich denke, dass stattdessen * result = malloc (strlen (argv [2]) + strlen (Puffer) +2); du wolltest result = .... schreiben (jetzt übertreibst du die ersten 4 Bytes mit dem Zeiger auf den neuen Ergebnisspeicher) Noch etwas - bist du dir sicher, dass du genug Speicher für den Befehl zugewiesen hast? – sborpo

Antwort

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

Ergebnis ist ein char *, so ist dies ein Fehler (entfernen Sie einfach das *)

edit: ein wenig explaination

malloc einen void * zurückkehren, Sie dies hier setzen das 1byte, auf das von result auf die Zeigerrückgabe von malloc gezeigt wird

+0

Danke, es half und löste das erste Problem. Jetzt liest das Programm alle Zeichenfolgen aus der Textdatei. Immer noch warte ich auf etwas Hilfe, um den Zeichenkettenwert von der Exe zu erhalten, die ich mit System laufe. –

+0

Sie müssen eine Pipe erstellen, siehe [hier] (https://stackoverflow.com/questions/7292642/grabbing-output-from-exec) –

Verwandte Themen