mikrocontroller.net

Forum: Compiler & IDEs Frage zu Zeiger/ Dateistream


Autor: Icke Muster (Firma: my-solution) (hendi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich hab noch mal ne kurze Frage zu Zeigern. Wenn ich einen schon 
vorhandenen einem andern übergebe, dann ist doch die Adresse in diesem 
gespeichert und wenn ich den neuen Zeiger manipuliere, so wird der alte 
nicht verändert, also die Adresse in ihm. Wieso fuktioniert das bve 
FILE-Zeigern nicht, wenn ich genau so verfahre und zum Bsp. einen Zeiger 
an fgetc(FILE *) übergebe, dann funktioniert das wie gewollt, doch wenn 
ich fgetc noch mal mit einem anderen Zeiger, der auf die gleiche Datei 
zeigt ausführen will, so klappts nicht ohne rewind. Ich würd nur genr 
wissen, wo mein Verständnisproblem ist, danke schon mal!!!
Bis dann.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der FILE Zeiger ist sicher ein Zeiger auf eine Struktur.
Dadurch das du den Zeiger kopierst bekommst du
keine Kopie dieser Struktur. In der Struktur
wird die Dateiposition gespeichert. Ob du nun
mit Zeiger A auf die Datei zugreifst oder mit Zeiger B,
die Dateiposition für Zeiger A UND für Zeiger B wird gleichzeitig
verändert weil du keine Kopie der Struktur hast, sondern nur
zwei Zeiger auf EINE Struktur.

Das müsste so ungefähr hinkommen ;)

Autor: Icke Muster (Firma: my-solution) (hendi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also C von A bis Z von Galileocomputing sagt folgendes: "...Der 
FILE-Zeiger – es wird ja auch von einem FILE-Stream gesprochen – ist 
eine Struktur, die in der Headerdatei <stdio.h> deklariert ist. Diese 
Struktur beinhaltet alle Informationen, die für die höheren 
Datei-E/A-Funktionen benötigt werden, beispielsweise:
gp    den Puffer – die Anfangsadresse, den aktuellen Zeiger, die Größe
gp    den File-Deskriptor (mehr dazu bei den Funktionen der niedrigeren 
Ebene)
gp    die Position von Schreib-oder Lesezeiger
gp    die Fehler- und EOF-Flags
...", Also scheint deine Erklärung zu stimmen! Danke, wieder was gelernt 
:-)!

Autor: Bobby (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da hat der Gali aber was verwechselt:

Der FILE Pointer ist keine Struktur,
sondern ein Zeiger auf eine Struktur vom Typ FILE.

Autor: Icke Muster (Firma: my-solution) (hendi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt, is mir gar nich aufgefallen, dann sollte man das dem Gali 
vielleicht mal mitteilen....

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich sollte einen gar nicht interessieren, was FILE ist. In der 
Regel wird's wohl eine Struktur sein, da das eine sinnvolle 
Implementation ist, aber generell ist es einfach irgendein Datentyp, der 
von den File-Funktionen intern genutzt wird. Man muß eigentlich nur 
wissen, daß open einen Zeiger darauf zurückliefert und man an alle 
anderen File-Funktionen diesen übergeben muß.

> Hallo, ich hab noch mal ne kurze Frage zu Zeigern.Wenn ich einen schon
> vorhandenen einem andern übergebe, dann ist doch die Adresse in diesem
> gespeichert und wenn ich den neuen Zeiger manipuliere, so wird der alte
> nicht verändert, also die Adresse in ihm.

Genau.

> Wieso fuktioniert das bve FILE-Zeigern nicht, wenn ich genau so
> verfahre und zum Bsp. einen Zeiger an fgetc(FILE *) übergebe, dann
> funktioniert das wie gewollt, doch wenn ich fgetc noch mal mit einem
> anderen Zeiger, der auf die gleiche Datei zeigt ausführen will, so
> klappts nicht ohne rewind.

Wo ist denn da der Unterschied? Ein Zeiger auf int verhält sich doch 
genauso. Wenn ich den kopiere, dann über das Original den int verändere, 
sehe ich auch über den anderen Zeiger den veränderten int-Wert und nicht 
den von vor der Kopieraktion.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.