Problem mit fwrite()
-
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!
-
seit mir nicht böse, aber wenn ich es im .net und im borland builder schreiben kann werde ich dieses nicht ändern nur weil ihr andere compiler oder ides benutzt bei denen es nicht funktioniert, mag sein dass ich mal probs damit hab, ja schön dann werd ich es ändern aber solange es funktioniert und dieses tut es werde ich es 100% nicht ändern, ich habe mir deine ratschlag zu herzen genommen und es mir gemerkt, ABER ich lass mir nicht vorschreiben wie ich was benutzen soll nur weil mir irgendeiner mit irgendwelchen normen kommt, es FUNKTIONIERT unter .net und unter Borland Builder somit ist es für mich gegebn dass ich es auch so weiterhin schreiben kann, da ich nur auf einen dieser ide's bzw. compilern programmier, ob das im ansi-c jetzt anders is oder nicht is mir egal.
-
Das hat nichts mit Normen zu tun du Pansen, sondern einfach damit, was AJ dir versucht hat zu erklären... Und sowas will studiert sein...