Können Cs Fgets dazu gebracht werden, mit einem String * not * aus einer Datei zu arbeiten?

7

Insbesondere das Codebeispiel hier funktioniert großartig, aber nur, wenn die Zeichenfolge in einer Datei gespeichert ist.

Manchmal brauche ich es, um eine generierte Zeichenfolge zu verarbeiten (gespeichert in einer String-Variablen), aber ich habe Probleme, den dritten Parameter von fgets zu überzeugen, mit String-Variablen zu arbeiten, weil es ein Zeiger auf eine Dateistruktur .

Oder gibt es vielleicht ein funktionales Äquivalent zu fgets, das für Strings verwendet werden kann?

Irgendwelche Vorschläge? Danke!

    
Monte Hurd 15.01.2010, 02:00
quelle

7 Antworten

9

Im Geiste des Hackens zusammen schnelle Antworten, hier ist "sgets", die ich gerade geschrieben habe. Es versucht, Fets zu emulieren, aber mit String-Eingabe.

Bearbeiten Es wurde ein Fehler behoben, auf den Monte hingewiesen hatte (Danke). Wütend tippen Sie ein Dienstprogramm, während Sie glauben, dass mindestens 15 andere Menschen mit genau der gleichen Idee verzweifelt dasselbe tun, führt nicht zu gut getesteten Code. Schlechtes ich. Die ursprüngliche Version enthielt das Newline-Zeichen für den folgenden Aufruf.

%Vor%     
Mark Wilkins 15.01.2010, 03:15
quelle
4

Die Standard-C-Bibliothek bietet diese Funktionalität nicht.

Aber die sichere / schnelle I / O-Bibliothek von AT & T tut dies Aktivieren Sie Speicher-Streams und bietet auch Wrapper-Code für die Verwendung der FILE-API mit ihren Erweiterungen. Das letzte Update ist von Februar 2005, also haben sie entweder alle Bugs ausgearbeitet oder sie können es sich nicht mehr leisten, es jetzt zu warten, dass Luke Wilson ist auf der Gehaltsliste : - (

Das Paket kann hier heruntergeladen werden .

    
R Samuel Klatchko 15.01.2010 02:06
quelle
3

sscanf sollte es tun. Natürlich sind die Semantiken anders.

    
Hassan Syed 15.01.2010 02:07
quelle
2

Wenn sich die Zeichenfolge bereits im Speicher befindet, können Sie in Zeilenumbrüche (entweder mit strtok , wenn Sie die Zeichenfolge mutieren können und keine Notwendigkeit haben, sich um die erneute Eingabe zu kümmern, oder manuell% co_de verwenden) % und kopieren Sie selbst in einen separaten Puffer.)

Sie würden keine plattformabhängige Zeilenumbruch-Konvertierung erhalten, die Ihnen die stdio-Funktionen normalerweise bieten würden. Daher ist besondere Vorsicht erforderlich, wenn Ihre Zeichenfolgen im Speicher beispielsweise CRLF-Zeilenabschlusszeichen verwenden.

    
jamesdlin 15.01.2010 02:45
quelle
2

Verwenden Sie eine Pipe, und öffnen Sie dann die Pipe mit fdopen , um eine FILE * zu erhalten, und lesen Sie dann davon.

%Vor%     
dreamlax 15.01.2010 03:32
quelle
1

Sie müssen lediglich eine lineare Suche nach Zeilenenden in der Zeichenfolge durchführen. Hier ist ein kleines Programm, mit dem Sie Ihre eigene String-Streaming-Klasse schreiben können.

%Vor%     
Judge Maygarden 15.01.2010 03:01
quelle
0

Ich habe den Quellcode der fgets-Funktion geändert:

%Vor%

und Hauptfunktion:

%Vor%

und Ausgabe:

%Vor%     
omeraygor 04.01.2014 11:03
quelle

Tags und Links