[C] zugreifen und schreiben in binär datei

nik0

Newbie
Registriert
Juni 2013
Beiträge
3
Hallo zusammen,




ich möchte eine programm erstellen wo ich auf eine bin datei zugreifen kann und drauf schreiben kann also ich möchte auf eine bestimmt punkt zugreifen und drauf schreiben
habe ein programm geschrieben und es wird kompiliert aber kommt danach immer fehler meldung :(

da ist mein programm
Code:
#include <stdio.h>





int main ()
{
    
    char al;

    FILE *stream = NULL;    

    stream = fopen("songliste.bin","w+b");    
    


    fseek(stream, -(2)*(sizeof(stream)), SEEK_END);
    
    
    printf ("\n geben sie die neue album ein\n");
    scanf("%d",al);

    fwrite("%d", sizeof(stream), 1, stream);
    
    fclose(stream);
    return 0;
    }

danke für eure hilfe

gruß niko
 
Zuletzt bearbeitet von einem Moderator: (Code-Tags ergänzt)
Es ist zu schwer Code Tags zu nutzen und die Fehlermeldung hinzuschreiben.
 
1. welche fehlermeldung kommt denn? das sollte man schlauerweise natürlcih dazu schreiben.

2. was genau beabsichtigst du mit "sizeof(strem)". ich glaube nämlich du willst da was anderes. denn sizeof(strem) gibt dir die anzahl bytes, die der pointer FILE* braucht. ich glaub nicht, dass das für dich an der stelle relevant ist.
 
Der ganze Code ergibt eigentlich überhaupt keinen sinn und daraus kann man auch überhaupt nicht nachvollziehen was da passieren soll.
Und warum wird ein Album, welches höchstwahrscheinlich Text sein soll, in eine char Variable gelesen, die auch noch als Int eingelesen wird?
Und was soll das fseek dort?

Ich würde vorschlagen nochmal ganz von Vorne anzufangen und erstmal überhaupt lesen was int, char usw. ist, denn so macht das überhaupt keinen Sinn.
 
Bin zwar etwas eingerostet, aber ein einfaches char für einen Albumtitel?

Fehlermeldung wär natürlich wirklich toll.
 
das ist die fehler meldung

fehlermeldung.jpg
 
Ich errate mal deine Fehlermeldung. In Zukunft bitte immer mit angeben.

Error: StreamPointer out of File Exception.
- Du setzt mit fseek(stream, zahl, type) deinen Pointer beginnend vom Ende (SEEK_END) der Datei noch um das minuszweifache auf den Anfang - Du schreibst also eine ganze Datei vor deine Datei. Wieso? Das ergibt keinen Sinn. Würde er hier keinen Fehler verursachen, würdest du zufällige Blöcke deiner Festplatte zerstören. Tut er aber nicht, weil sizeof(stream) nicht die größe der datei, sondern die größe des streams liefert. Dein Glück.

Andere Fehler die du machst, die der Compiler aber nicht anprangern wird:
bei deinem fwrite hast du gesagt, du willst genau soviel schreiben, wie dein stream-Pointer groß ist. Da sehe ich keinen sinnvollen Zusammenhang.


Setz dich doch mit der Referenz von fseek und fwrite auseinander, dann sollte dir einiges klarer werden.
 
@myaccount, das wird NICHTS beheben!

(myaccount )Geändert von myaccount (Heute um 12:17 Uhr)

Das wirds noch weniger beheben!
 
Zuletzt bearbeitet:
Für weitere Hilfegesuche:

Spätestens bei "printf ("\n geben sie die neue album ein\n");" hört die erste Hälfte der hilfsbereiten Mitglieder auf zu lesen. Ist immer hilfreich bei sowas besonders auf Rechtschreibung zu achten.

Aber auch der Rest des Programms ergibt wenig Sinn und die Meldung mit der nicht initialisierten Variable aus dem Screenshot sollte man selbst auflösen können.
 
Warum antworten eigentlich so viele zu den Problemen, wenn sie doch gar keine Ahnung haben?
Es ist NICHT das Problem der initialisierten Variable. Bei dem Programm stimmt so absolut gar nichts und es gibt mindestens 5 Fehler, die alle zu einem Segmentation Fault führen. Das gesamte Programm ergibt keinen Sinn und ist falsch. Da hift auch kein char al = 0; oder char al[100];

Das einzige Problem ist, dass der Autor keine lust hatte sich wenigstens in die Basics einzulesen und nicht mal weis was char, int usw. ist.
 
GrinderFX schrieb:
@myaccount, das wird NICHTS beheben!

(myaccount )Geändert von myaccount (Heute um 12:17 Uhr)

Das wirds noch weniger beheben!

Wieso wird es nicth beheben ?
Laut Exception steht da, dass die Variable "al" ohne initialisierung benutzt wird.


@GrinderFX,
es gibt sicherlich noch ein paar andere Fehler, aber das erstmal das was die Fehlermeldung aussagt an dieser Stelle.
GrinderFX schrieb:
Warum antworten eigentlich so viele zu den Problemen, wenn sie doch gar keine Ahnung haben?
Und hör bitte auf zu jammern, woraus schliesst du, dass die Leute keine Ahnung haben ?
 
Zuletzt bearbeitet:
Ändert nichts daran, dass er zumindest den Fehler mit der initialisierten Variable selbst hätte auflösen können müssen. Mehr gab meine Aussage auch nicht her.

Edit: Wer an der Fehlermeldung "Variable nicht initialisiert" scheitert sollte sich nochmal vor die C-Bibel setzen und Seite 1 aufschlagen.
 
@nik0

zusätzlich zu meinem

Code:
char al = 0;

was ich schon oben geschrieben habe, benötigt scanf als 2. Parameter einen Zeiger auf die Adresse der Variable,
also ändere bitte die betroffene Zeile in

Code:
scanf("%d", &al);
 
al zu initialisieren bringt deshalb nichts, weil wenn scanf korrekt aufgerufen wird (&al), es völlig Wurscht ist, ob die Variable al vorher initialisiert war.
 
antred schrieb:
al zu initialisieren bringt deshalb nichts, weil wenn scanf korrekt aufgerufen wird (&al), es völlig Wurscht ist, ob die Variable al vorher initialisiert war.

Alle meckern über seine Fehler, weil er noch ein Anfänger ist und keine Grundlagen drauf hat, usw usw usw
Aber alle Variable vorzuinitialisieren gehört trotzdem zu gutem Stil und wird empfohlen, auch wenn in diesem konkreten Fall das weniger bringt.

Aber ich würde es trotzdem machen, alleine schon deswegen, damit er sich dadran gewöhnt das immer zu machen.
 
Zuletzt bearbeitet:
Alle meckern, weil er zu faul ist die erste Seite seines Buches zu lesen und nun möchte, dass wir ihm seine Hausaufhaben machen.
Und wie antred schon schreibt, es ist egal wie er was initialisiert.
 
Ergänzung ()

GrinderFX schrieb:
Alle meckern, weil er zu faul ist die erste Seite seines Buches zu lesen und nun möchte, dass wir ihm seine Hausaufhaben machen.
Und wie antred schon schreibt, es ist egal wie er was initialisiert.

hi
wie weißt du dass ich faul bin???? nächstes mal wenn du kein bock zu antworten hast dann lasse es einfach

mit meinem programm wollte einfach was ausprobieren um zu lernen einfach
 
Nun, du warst auch zu faul um:

- am Anfang die Fehlermeldung mitzugeben
- selbst Google zu bemühen
- bisherige Korrekturversuche anzugeben
- andere Lernbeispiele als Referenz zu verleichen
- den Code richtig zu formatieren
- auf Rechtschreibfehler zu achten,

insofern stimmt die Aussage schon :)
In anderen Programmierforen wärst du bereits verwarnt - und dein Thread geschlossen.

Das sollte lediglich ein Feedback für dich sein.
 
Zurück
Oben