Programm, das anderes Programm erzeugt

Hallo alle zusammen.
Ich hab ein schwiereiges Problem bei einem C/C++ Programm und hoffe, dass mir jemand helfen kann.

Also ich möchte ein Programm schreiben, das ein anderes Programm erzeugt.
Hier einmal ein konkretes Beispiel:
Mein programm soll "prog1.exe" heißen. Wenn ich das Programm starte, kann ich einen String eingeben und dann wird eine Datei namens "prog2.exe" angelegt. Wenn ich prog2.exe dann ausführe, soll dieser String, den ich in prog1.exe eingegeben hab auf dem Bildschirm erscheinen.

Weiß jenand von euch wie man das programmiert???
Vielen Dank schon mal im vorraus für mögliche Antowrten!!!
 
In der From nur schwer durchzuführen, da der code bereits compiliert ist. Mein Vorschlag: Eingabe in eine Datei schreiben und aus der Datei lesen und ausgeben.
-------------------------------------
Prinziep:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{ofstream dat_aus;
string dateiname;
cout <<"Dateiname eingeben: ";
cin >> dateiname;
cout <<endl;

dat_aus.open(dateiname.c_str(), ios_base::out);

return 0;
}
----------------------------------

Oder: Code auf mehrere Quell-Dateien verteilen und einen vordeffinierten String durch die eingabe mit "replace" ersetzen, allerdings weis ich nicht, wie du den compiler im code aufrufst (g++ im Prompt mit "g++ quelldatei1.cpp quelldatei2.cpp -o programm"), schau am besten mal in der Hilfe deiner Entwicklungsumgebung.

Natürlich kannst du auch den Code in eine Datei schreiben und diese dann comilieren, wenn diese gefunden wird, allerdings brauchst du dazu nach wie vor den Befehl um den compiler zu starten.
 
Ich würde auch sagen, entweder du musst einen compiler einbauen, einen installierten verwenden oder entsprechend eine interpretierte Sprache benutzen (am einfachsten ein kleines Shell- oder Bashskript)
 
Moin,

das geht viel einfacher...

1. Man schreibe ein kleines Programm:
Code:
# include <stdio.h>
# include <stdlib.h>

int  main(int argc, char **argv)
{
        puts("Dies ist ein ziemlich langer String......................");
        return(0);
}
compiliere es "cc prog.c -oprog -O" und schmeiße überflüssige Symbole weg "strip prog".

Dann schreibst du dir ein kleines Programm, welches "prog" einliest und die Bytes als Dezimalzahl ausgibt.
Davor noch ein Array deklariert, so daß das Ganze dann etwa so aussieht:
Code:
int proggi[2113]={
47,
0,
220,
...
10
};
Die Größe des Arrays ist natürlich die Größe von "prog". Mittels "hd" oder "od" findest du den Offset des Strings heraus. Also, wo er in dem Array steht. Und dorthin schreibst du deinen neuen String.

Dann öffnest du einfach eine Ausgabedatei und gibst das gesamte Array byteweise aus. Datei zu und fertig ist die Laube.

Oder, du erzeugst einfach C-Code, den du nachher compilieren kannst.

Code:
# include <stdio.h>
# include <stdlib.h>

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

        puts("Bitte String eingeben:");
        scanf("%s\n", zwi);
        puts("# include <stdio.h>");
        puts("# include <stdlib.h>");
        puts("int main(int argc, char **argv)");
        puts("{");
        printf("   puts(\"%s\\n\", zwi);
        puts("     return(0);");
        puts("}");
        return(0);
}

Ist das einfachste und systemunabhängig...
 
Wie ich sehe ist im diesem Threat ganz schön viel zusammengekommen.
Ich möchte mich bei euch allen für euere Beiträge bedankem und hoffe, dass ich euch auch mal weiterhelfen kann.

Caesar :D
 
Zurück
Oben