EXoGEN Geschrieben 24. Mai 2009 Geschrieben 24. Mai 2009 Hallo zusammen, ich habe folgendes Problem: ich möchte in einem C++-Programm eine HTML-Seite erzeugen, da gibt es aber wohl einen Haken, der mir nicht ersichtlich ist: Der HTML-Code(Dateiname: test1.htm): <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head><title>Testseite</title></head> <body><p>Hallo Welt</p></body> </html> Der C++-Code: #include<iostream.h> #include<conio.h> #include<string.h> #include<fstream.h> void main() { string buffer = "Test"; ifstream load( "test1.htm" ); getline( load, buffer ); load.close(); cout << "Content-Type: text/html\r\n\r\n"; cout << buffer; } Wenn ich mir den Inhalt meines Buffers aus dem C++-Programm in der Dos-Box ausgeben lasse, zeigt er mir auch den richtigen Inhalt der HTM-Datei an. Möchte ich aber die HTM-Datei im Browser erzeugen lassen, zeigt er mir dort nur den Wert an, mit dem ich den Buffer ursprünglich initialisiert habe. Also Ausgabe = Test. Als ob ich die getline Funktion überhaupt nicht angewendet hätte. :confused: Ich möchte das aber unbedingt so machen, weil ich es hässlich finde, wenn 100 Zeilen HTML-Code in der C++-Datei stehen. Das habe ich natürlich trotzdem ausprobiert. Und dann wird die Seite auch richtig erzeugt. Aber wie gesagt, diese Art würde mir nicht sehr gefallen. Es wird auch benotet, da es eine Projektarbeit für die Schule ist. Hat vielleicht jemand eine Erklärung dafür, warum das mit der getline-Funktion nicht so richtig klappt? Ich wäre euch sehr dankbar! Zitieren
Klotzkopp Geschrieben 24. Mai 2009 Geschrieben 24. Mai 2009 #include<iostream.h> #include<conio.h> #include<string.h> #include<fstream.h>[/code] Die Header heißen <iostream>, <string> und <fstream>, ohne ".h". <conio.h> ist nicht standardisiert, du benutzt aber auch keine Funktion aus diesem Header, die Includedirektive kann also weg. Zudem befinden sich alle Bezeichner der Standardbibliothek im Namensraum std, es muss also std::ifstream, std::string, std::cout usw. heißen. Du kannst auch vor oder in main eine using-Direktive für den Namespace std benutzen: [code]using namespace std;Bei größeren Programmen ist das aber nicht empfehlenswert. Außerdem muss die main-Funktion den Rückgabetyp int haben. Zum eigentlichen Problem: Ich vermute, dass bereits das Öffnen der Datei fehlschlägt. Prüf doch mal den Status des Streams nach dem Öffnen und nach getline. Zitieren
EXoGEN Geschrieben 25. Mai 2009 Autor Geschrieben 25. Mai 2009 Vielen Dank Klotzkopp, aber wenn du das liest, fällst du wahrscheinlich vom Stuhl. Das Problem war dieses: Ich habe von meinem C++-Programm nur die exe-Datei im cgi-bin Verzeichnis des Servers gespeichert, nicht aber die htm-Datei test1. :upps Ist noch alles neu für mich, mein Ausbilder hat aber auch erst mal eine halbe Stunde herumgerätselt Hab' trotzdem Dank, dass du geantwortet hast! Zitieren
Klotzkopp Geschrieben 25. Mai 2009 Geschrieben 25. Mai 2009 aber wenn du das liest, fällst du wahrscheinlich vom Stuhl.Nein, genau so etwas habe ich erwartet. Und wenn du so kritische Dinge wie das Öffnen von Dateien im Code ordentlich behandelt hättest, hättest du vermutlich viel schneller gemerkt, wo das Problem ist. Die anderen Dinge, die ich angemerkt habe, solltest du übrigens auch umsetzen. Und sei es nur deshalb, damit sich dein Programm auch später noch übersetzen lässt, wenn du einen etwas aktuelleren Compiler verwendest. Zitieren
EXoGEN Geschrieben 26. Mai 2009 Autor Geschrieben 26. Mai 2009 Die hatte ich auch als erstes umgesetzt, nur hat das dadurch natürlich trotzdem mein (nun bekanntes) Problem nicht behoben. Aber auf jeden Fall danke! Das werde ich ab jetzt berücksichtigen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.