Problem mit fwrite()
-
@Hirogen
Weißt du jetzt woran es liegt (fwrite())? Oder muss ich es dir noch erklären?
-
AJ schrieb:
@Hirogen
Weißt du jetzt woran es liegt (fwrite())? Oder muss ich es dir noch erklären?Es liegt definitiv nicht daran, hab auch schon meine programmier prof gefragt und der meint das es soweit ok ist, jedoch schreibt er mir einfach nicht in die datei, es muss an irgendwas anderem liegen.
Wenn ich einen breakpoint lege und das programm dort kurzzeitig abbricht (.net) kann ich mir den inhalt der variablen ansehen, und wenn ich mir den Inhalt des pointer b (BUCH *b) anseheh, steht dort irgnedwas kryptisches und dann immmer wieder "Fehlerhafter Pointer" könnte es damit was zu tun haben
aber eine erklärung wie du es meinst wäre sicherlich hilfreich
-
Lass mal das & beim ersten Parameter weg.
-
MFK schrieb:
Lass mal das & beim ersten Parameter weg.
das und ist relativ egal, auch das sizeof war nicht schuld es war etwas ganz simples
[cpp]
rewind(datei);
if(!fwrite(&b, GROESSE, datensaetze_in_datei, datei))
{
printf("Die Datensaetze konnte nicht in die Datein eingetragen werden\n");
getch();
}
else [/cpp]und zwar hat vor dem fwrite() kurzerhand ein rewind(datei) gefehlt, anscheinend hat er die ganze zeit auf EOF gezeigt und somit schreibt er ja nix rein, naja jetzt hat sich das erledigt
-
Das & vor b bei deinem fwrite() gehört trotzdem weg. b ist ein Zeiger und hat damit eine Adresse als Inhalt. fwrite() erwartet eine Adresse, wo die Daten stehen. Hast du überhaupt schon überprüft, ob die Daten in der Datei richtig sind, nachdem du sie reingeschrieben hast?
-
AJ schrieb:
Das & vor b bei deinem fwrite() gehört trotzdem weg. b ist ein Zeiger und hat damit eine Adresse als Inhalt. fwrite() erwartet eine Adresse, wo die Daten stehen. Hast du überhaupt schon überprüft, ob die Daten in der Datei richtig sind, nachdem du sie reingeschrieben hast?
das & ist dem .net Studio relativ egal, es interessiert sich nicht dafür, zum einen deshalb weil eine Adresse drin steht, und somit so und so eine Adresse übergeben wird, richtigkeits halber gehört aber das & weg und das hab ich auch getan.
Sowohl wenn das & weg ist als auch wenn es dabei ist werden die Daten richtig in die Datei hineingeschrieben.
nachdem ich das rewind jetzt hinzugefügt habe funktioniert es einwandfrei
-
Hirogen(CD) schrieb:
das & ist dem .net Studio relativ egal
Eigentlich nicht; es ja ein unterschied ist ob du die Adresse übergeben willst, die in dem Pointer steht oder die Adresse des Pointers selbst...:)
Sowas kann eigentlich nicht mal MS bringen ^^
-
Splieth@School schrieb:
Hirogen(CD) schrieb:
das & ist dem .net Studio relativ egal
Eigentlich nicht; es ja ein unterschied ist ob du die Adresse übergeben willst, die in dem Pointer steht oder die Adresse des Pointers selbst...:)
Sowas kann eigentlich nicht mal MS bringen ^^probiers im .net aus, es war meinem .net egal, ob ich &b oder b geschrieben habe.
Und ich kann mir auch gut vorstellen warum.
wenn ich &b schreib übergebe ich ja die Adresse mit und wenn ich b schreib übergebe ich auch die Adresse mit da ja "bei einem Pointer immer die Adresse übergeben wird."
zitat meines C/C++ Prof.
-
Meiner Logik nach dürfte das trotzdem nur zufall sein... Es sei denn der Compiler holt sich den Wert der Adresse die in der Adresse steht, die du übergeben hast (also des Pointers ;)). Ganz vorstellen kann ich mir das aber eher nich; selbst wenn klingt das doch sehr unsicher, ist schließlich MS.
Prinzipiell kann ich mir das aber nicht so vorstellen, weil der Pointer ja 'ne ganz andere Adresse hat als auf was er zeigt! Sehe ich zumindest so ^^
-
funktioniert unter dem Borland Builder auch
-
Ändert aber nichts an meiner Erklärung... fwrite will die Adresse an der die Daten stehen, nicht die Adresse des Zeigers, der auf diese Daten zeigt! Dessen Adresse liegt ja (ganz) wo anderes :p
-
Splieth@School schrieb:
Ändert aber nichts an meiner Erklärung... fwrite will die Adresse an der die Daten stehen, nicht die Adresse des Zeigers, der auf diese Daten zeigt! Dessen Adresse liegt ja (ganz) wo anderes :p
das stimmt schon aber fwrite, wandelt diese daten automatisch um
das meine ich damit, und somit ist es wurscht was ich dem fwrite übergebe.
-
Mag ja sein, dass es einige Compiler so handhaben, was ich ja auch gar net bestreitet habe. Nur kannst du ja nicht Blind davon ausgehen, dass dies bei jedem geschieht und laut Referenzen findet nunmal keine automatische Umwandlung statt; ergo: gleich vernünftig übergeben!
-
Splieth@School schrieb:
Mag ja sein, dass es einige Compiler so handhaben, was ich ja auch gar net bestreitet habe. Nur kannst du ja nicht Blind davon ausgehen, dass dies bei jedem geschieht und laut Referenzen findet nunmal keine automatische Umwandlung statt; ergo: gleich vernünftig übergeben!
funktioniert auch beim Borland Turbo C++ 3.xx und der ist schon sehr happig was solche sachen betrifft und auch schon sau alt, insofern kann ich davon ausgehen das jeder NEUE compiler dieses auch automatisch erkennt und sollte er es nicht erkennen muss ich es ändern.
-
Nein, kannst du nicht! Wenn etaws nicht genormt ist kannst du nicht einfach davon ausgehen, dass die "Funktion" bei jedem Compiler implementiert ist! Nur weil ein altes Auto ABS hat kann du ja auch nicht davon ausgehen, dass auch jedes neue über dieses tolle Gimmick verfügt...;) Wenn dein Prof was anderes sagt: erschlagen!
-
Splieth@School schrieb:
Nein, kannst du nicht! Wenn etaws nicht genormt ist kannst du nicht einfach davon ausgehen, dass die "Funktion" bei jedem Compiler implementiert ist! Nur weil ein altes Auto ABS hat kann du ja auch nicht davon ausgehen, dass auch jedes neue über dieses tolle Gimmick verfügt...;) Wenn dein Prof was anderes sagt: erschlagen!
ich denke dass ich aufjedenfall davon ausgehen kann wenn die 2 größten ide's es unterstützen dass der Rest mehr oder weniger nachzieht, mag sein das es im ansi-c nicht standardisiert wird, aber funktionieren tut es trotzdem und wenns funzt dann funzt und dann werde ich es nicht ändern nur weil es dann unter umständen auf einem system nicht funktioniert für das es nicht gemacht ist.
-
Du bringst genau die Eigenschaften mit die ein Programmierer haben sollte...
Wenn du meinst, einen gut gemeinten Rat nicht annehmen zu müssen, dann bitte! Wenn man sich aber schon in einem Forum rumtreibt und nach verbesserungsvorschlägen sucht sollte man diese auch wahrnehmen; darum geht es hier schließlich und wenn du dir mal den Aufbau von fwrite anguckst wirst du auch schnell merken warum du nicht Recht hast..
-
@Splieth@School:
ganz meine meinung. --
ich bewundere deine ausdauer... keep it up.
gruß, oli
-
Hirogen(CD) schrieb:
Splieth@School schrieb:
Hirogen(CD) schrieb:
das & ist dem .net Studio relativ egal
Eigentlich nicht; es ja ein unterschied ist ob du die Adresse übergeben willst, die in dem Pointer steht oder die Adresse des Pointers selbst...:)
Sowas kann eigentlich nicht mal MS bringen ^^probiers im .net aus, es war meinem .net egal, ob ich &b oder b geschrieben habe.
Und ich kann mir auch gut vorstellen warum.
wenn ich &b schreib übergebe ich ja die Adresse mit und wenn ich b schreib übergebe ich auch die Adresse mit da ja "bei einem Pointer immer die Adresse übergeben wird."
zitat meines C/C++ Prof.
So ein Schmarrn!
Das & ist nur unnötig, wenn du eine Referenz hast. Bei einem Zeiger ist es aber ein riesiger Unterschied!
Probier das hier mal aus, dann siehst du was ich meine:
#include <stdio.h> int main(void) { int * zeiger; int wert = 5; zeiger = &wert; printf("Wert: %d\n", *zeiger); printf("Adresse von Wert: %d\n", zeiger); printf("Adresse von Zeiger: %d\n", &zeiger); return(0); }
-
Endlich mal jemand der hier tacheles redet!