Einlesen bis doppelter Zeilenumbruch

dsNDesign

Erfahrenes Mitglied
Hei,
ich möchte gerne, dass meine Tastatureingabe solange eingelesen wird, bis ein doppelter Zeilenumbruch kommt (also \r\n\r\n).

Momentan mache ich es so:
Code:
fgets(buffer, BUF_SIZE, stdin);
Damit lese ich aber ja nur eine Zeile ein. Es sollen jetzt aber z.B. 5 Zeilen kommen, die er alle einlesen soll, und dann kommen die 2 Zeilenumbrüche (Ich drücke quasi 2 mal Enter).

Ist sowas möglich?

Gruß
 
Einfach mehrere fgets hintereinander (natürlich genug Speicher bereitstellen),
bis die eingelesene Zeile nur \n ist.
 
Ok, ich habe jetzt nochmal ein ähnliches Problem.
Diesesmal geht es allerdings darum, einen doppelten Zeilenumbruch / eine Leerzeile zu erkennen.

Ich habe folgende Eingabe, die in einem char-Array gespeichert ist:

Code:
PUT /adressen HTTP/1.1 
User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 
Host: localhost:65000 
Accept: */* 
Content-Length: 4 
Content-Type: application/x-www-form-urlencoded 
 
Test

Ich möchte jetzt nur den unteren Teil (Test) haben. Habe es schon versucht, indem ich mit strtok nach 2 Zeilenumbrüche suche, allerdings ohne Erfolg. Ich könnte auch einfach 6x strtok mit einem Zeilenumbruch ausführen, jedoch ist das denke ich nicht gerade die schönste Art und Weise.
 
Warum strtok nicht geht, ohne Code keine Ahnung.

Ohne strtok, unter Voraussetzung dass wirklich ein Doppel-\n vorkommt:
C++:
int i;
char derstring[...];
...
i = 0;
while(derstring[i] != '\n' || derstring[i+1] != '\n')
    i++;
strcpy(derstring, &derstring[i]);
 
Mal noch der vollständigkeit halber:
Den Inhalt von "derstring" bekomme ich über curl (recv(c, buffer, sizeof(buffer)-1, 0)).

Habe es jetzt so:
Code:
int i = 0;
while(buffer[i] != '\n' || buffer[i+1] != '\n')
	i++;
strcpy(put, &buffer[i]);

Es geht jedoch nicht. Bekomme vom Server die Antwort "Empty reply from server".

Wenn ich die hintere Überprüfung weglasse (buffer[i+1]), funktioniert des, bekomme dann aber natürlich
Code:
User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
geliefert.

Gibt es irgendeine Möglichkeit, sich die genaue Form einer Textdatei anzeigen zu lassen? Also das dann z.B. \n statt einem Zeilenumbruch da steht?
Denn ich speichere mir ja die Anfrage an den Server in einer Log-Datei. Und die Anfrage über curl sieht so aus:
Code:
curl -X PUT "http://localhost:65000/adressen" -d "Test"
 
Ich denke du arbeitest mit dem HTTP-Protokoll und daher die "doppelten Zeilenumbrüche" als Ende des Headers? Hier ist Zeilenumbruch das falsche Wort, da diese überall bisschen anders sind. Effektiv erhälst du folgendes Schema im Header:
Code:
val1\r\n
val2\r\n
...\r\n
\r\n

Grüsse
Cromon
 
Das Problem ist ja, dass ich nicht immer weiß, wie groß mein header ist. Wenn ich dann z. B. 6 Zeilen nach unten gehen, stimmt es in diesem Fall. Aber dann kann ich ja nicht davon ausgehen, dass es immer stimm . Deshalb ist ja eigentlich die Leerzeile da.
 
Jo, eben, die fängst du ab indem du schaust wo zwei mal nacheinander eine Leerzeile kommt.
C++:
std::wstringstream contentStream;
contentStream << buffer;
std::wstring currentLine;

while(std::getline(contentStream, currentLine)) {
      if(currentLine == L"\r")
            ; // ende des headers
}
 
Zurück