Freitag, Dezember 13, 2019

Rückwärts gehen, indem man im Datei-stream

Sagen, ich habe einen file-Zeiger wie dieses:

file_ptr = fopen(“test.txt”, r+”);

und ich möchte das ändern jedes char’s ASCII-Wert als bewege ich mich durch den stream (ich Tue dies als eine Chiffre, also wenn es einen besseren oder effizienteren Weg, dies zu tun, lassen Sie es mich bitte wissen).

Ich bin versucht, einen while(!feof(file_ptr)) {} Schleife mit fgetc() und fputc, aber die file_ptr werden, zeigen auf den nächsten char, also ich möchte wissen, ob es etwas gibt, das ich tun kann Punkt rückwärts einen Punkt.

Im wesentlichen, ich möchte wissen, die Datei-stream-äquivalent für:

char* blah="blah blah";
char* index=blah;
index++;/*how to navigate a file stream in this way*/
  • fseek(file_ptr, -1, SEEK_CUR);
InformationsquelleAutor spatara | 2012-03-03

1 Kommentar

  1. 6

    Ja: können Sie die fseek – Funktion:

    fseek(file_ptr, -1L, SEEK_CUR); //move backwards one character

    Darüber hinaus nach Ihrem fputc bevor Ihre fgetc werde Sie anrufen möchten fseek wieder:

    fseek(file_ptr, 0L, SEEK_CUR); //don't move

    nur benachrichtigt das system, dass Sie Umschalten zwischen lese-und Schreibvorgänge, so dass es weiß, um richtig zu Spülen, alle Puffer und so weiter. (Sonst könnte man nicht eigentlich da, wo Sie denken.)

    Durch die Art und Weise, damit dies ordnungsgemäß funktioniert, öffnen Sie die Datei im Binärmodus statt im Textmodus:

    file_ptr = fopen("test.txt", "rb+");

    da sonst die in-C definition von „Charakter“ möglicherweise nicht exakt mit der in-Datei-definition von „Charakter“ (vor allem, wenn es um die Zeilenenden), und fseek vielleicht legen Sie in der Mitte von einer der letzteren.

    • Danke! Ich hätte nicht bekannt, benachrichtigt das system möchte, dass…auch, was ist der Zweck des „L“ in der offset-parameter?
    • Keinen Sinn, wirklich. Das macht es nur eine long, aber wenn Sie schreiben -1, der compiler implizit konvertieren, um ein long sowieso (weil es wird an eine Funktion übergeben, die erklärte wie ein long). Entweder man ist 100% in Ordnung.

Kostenlose Online-Tests

Letzte Fragen

Tun ItemView löst Blase?

Ich habe eine CompositeView für eine Tabelle. Ich habe Trigger-set in der Kind-ItemView für jede Zeile... var TableRow = Marionette.ItemView.extend({ tagName:...

Wie kann ich untersuchen, WCF was 400 bad request über GET?

Die folgenden WCF-endpoint funktioniert gut mit dem WCF test client: AssetList ListFlaggedAssets(short processCode, string platform, string endpoint = "null", string portalId = "null", int...

Bei der Verwendung von UUIDs, sollte ich auch mit AUTO_INCREMENT?

Wir bauen eine neue web-app, die eine offline-iPad - /Android-app-version auf einer Reihe von lokalen Geräten, die Einsätze mit neuen Daten. Als solche benötigen...

Actionscript-Objekt, das verschiedene Eigenschaften

Wie kann ich die Anzahl der Eigenschaften in einer generischen Actionscript-Objekt? (Wie die Array-Länge) InformationsquelleAutor Fragsworth | 2011-01-15

Wie plot mehrere Graphen und nutzen Sie die Navigations-Taste im [matplotlib]

Die neueste version von matplotlib erstellt automatisch Navigations-buttons unter den graph. Aber die Beispiele, die ich finden alles im Internet zeigen, wie erstellen Sie...