Lesen von strings mit Leerzeichen aus einer Datei

Ich bin an einem Projekt arbeiten und ich habe gerade festgestellt ein wirklich nerviges problem. Ich habe eine Datei, welche alle Nachrichten, mein Konto erhalten. Eine Nachricht ist eine Datenstruktur, die so definiert ist:

typedef struct _message{
char dest[16]; 
char text[512];
}message;

dest ist ein string, der keine Leerzeichen enthalten darf, im Gegensatz zu den anderen Feldern.
Strings erworben werden, die mit der fgets() Funktion, so dest und text können "dynamische" Länge (von 1 Zeichen bis zu length-1 legit Zeichen). Beachten Sie, dass ich Sie manuell entfernen die neue-Zeile-Zeichen nach jedem string abgerufen, der von der Standardeingabe.

Den "inbox" - Datei wird die folgende syntax verwendet, um Nachrichten zu speichern:

dest
text

So, zum Beispiel, wenn ich eine Nachricht von Marco, die sagt: "Hello, how are you?" und eine weitere Meldung von Tarma, die sagt: "gehst du in die Turnhalle heute?", meine inbox-Datei würde wie folgt Aussehen:

Marco
Hello, how are you?

Tarma
Are you going to the gym today?

Ich Lesen möchte, den Benutzernamen aus der Datei und Speicher es in string s1, und dann tun die gleiche Sache für die Nachricht und speichern Sie es in string s2 (und dann wiederholen Sie den Vorgang, bis ein EOF-Zeichen), aber da text Feld räumt Bereiche, die ich nicht wirklich verwenden fscanf().

Versuchte ich mit fgets(), aber wie gesagt, die Größe jeder string ist dynamisch. Zum Beispiel, wenn ich fgets(my_file, 16, username) es würde am Ende der Lektüre unerwünschte Zeichen. Ich brauche nur zu Lesen, die erste Zeichenfolge bis \n erreicht ist, und dann Lesen Sie die zweite saite, bis der nächste \n erreicht ist, wird diese Zeit inklusive Leerzeichen.

Jede Idee, wie kann ich dieses problem lösen?

  • fgets hält an ein newline oder EOF. Wenn Sie haben entfernt die neue line, don ' T, die Sie bereits wissen, die genaue Länge der Zeichenfolge?
  • Die 16, die Sie übergeben, um fgets() ist die maximale Länge der Zeichenfolge. fgets() hält an (16-1) chars oder newline oder EOF
  • Wenn ich empfangen von strings aus der Datei, ich weiß nicht, die genaue Länge kenne ich nur die maximale Länge einer Zeichenkette (16 chars für dest, 512 chars für text, einschließlich der \0) tut mir Leid für mich unklar.
  • Vane Du hast Recht. Vielleicht sollte ich ändern die syntax, die ich verwenden, um Nachrichten schreiben innerhalb der Datei...
InformationsquelleAutor Atlas80b | 2014-10-26
Schreibe einen Kommentar