Zum Inhalt springen

C++: getline speichert ausgelesene Zeile nicht im Buffer


Empfohlene Beiträge

Geschrieben

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!:)

Geschrieben


#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.

Geschrieben

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! :)

Geschrieben
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.

Geschrieben

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.:)

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...