Problem mit fwrite()



  • 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... 👎



  • rewind(datei); //Filepointer zurück stellen auf Anfang des Files
    if(b) //Wenn speicher alloziert wurde
    {
    rewind(datei); //Sicherheitshalber nochmal an den Datei anfang gehen

    Ernsthafte Dinge ignorierst Du, aber an der Stelle baust Du eine total überflüssige 'Sicherheit' ein.

    Übrigens:
    Printf geht auch nur zufällig gut. Ohne Flushen der Ausgabe ist es nicht zwingend, dass die Daten zum Zeitpunkt des getch() wirklich im Bildschirm stehen.

    Ich will gar nicht weiter ins Detail gehen, aber jene 25 oder die 15 hätten auch schöne DEFINEs verdient. Wobei Du für gleichzeitige Anpassung von scanf("%25s",... mal in die Tiefen des Präprozessors einsteigen kannst... 😉

    wenn die 2 größten ide's es unterstützen

    Ob das die Größten sind, ist wohl eine subjektive Ansicht.
    IDE hat mit Compiler auch nichts zu tun.



  • Hmmm... Also wenn du meinst, mit deiner Einstellung ein versierter Programmierer werden zu können solst du natürlich hier nicht aufgehalten werden :p
    Mach was du willst 🙂



  • Bitsy schrieb:

    rewind(datei); //Filepointer zurück stellen auf Anfang des Files
    if(b) //Wenn speicher alloziert wurde
    {
    rewind(datei); //Sicherheitshalber nochmal an den Datei anfang gehen

    Ernsthafte Dinge ignorierst Du, aber an der Stelle baust Du eine total überflüssige 'Sicherheit' ein.

    Übrigens:
    Printf geht auch nur zufällig gut. Ohne Flushen der Ausgabe ist es nicht zwingend, dass die Daten zum Zeitpunkt des getch() wirklich im Bildschirm stehen.

    Ich will gar nicht weiter ins Detail gehen, aber jene 25 oder die 15 hätten auch schöne DEFINEs verdient. Wobei Du für gleichzeitige Anpassung von scanf("%25s",... mal in die Tiefen des Präprozessors einsteigen kannst... 😉

    wenn die 2 größten ide's es unterstützen

    Ob das die Größten sind, ist wohl eine subjektive Ansicht.
    IDE hat mit Compiler auch nichts zu tun.

    das war die alte version in der neuen ist sehr wohl ein fflush() drinnen.

    jedoch das mit den 25 defines ist mir nicht klar 😉



  • Splieth@School schrieb:

    Hmmm... Also wenn du meinst, mit deiner Einstellung ein versierter Programmierer werden zu können solst du natürlich hier nicht aufgehalten werden :p
    Mach was du willst 🙂

    ich will in c/c++ bei gott kein versierter programmierer werden, dafür ist mir das ganze einfach zu umfangreich und zu langwierig es zu lernen, mir reichen voll und ganz oberflächliche dinge, ich konzentriert mich eher auf andere dinge, ich mach auch nur c/c++ weil mir nix anderes übrig bleibt.



  • Hirogen(CD) schrieb:

    Splieth@School schrieb:

    Hmmm... Also wenn du meinst, mit deiner Einstellung ein versierter Programmierer werden zu können solst du natürlich hier nicht aufgehalten werden :p
    Mach was du willst 🙂

    ich will in c/c++ bei gott kein versierter programmierer werden, dafür ist mir das ganze einfach zu umfangreich und zu langwierig es zu lernen, mir reichen voll und ganz oberflächliche dinge, ich konzentriert mich eher auf andere dinge, ich mach auch nur c/c++ weil mir nix anderes übrig bleibt.

    Das ist mal 'ne Aussage. Sich unter diesen Voraussetzungen dann hier zu registrieren ist doch eher lobenswert, find' ich.
    Das Problem ist nur - C/C++ oberflächlich ist ein Widerspruch in sich.
    (Dafür ist doch Java da, oder?)
    Wenn Du im Forum stöberst, da haben wir schon ellenlange Diskussionen über winzige Details geführt. Deshalb kannst Du Ratschlägen (wie z.B. speziell von AJ) auch bedingungslos trauen. Klar - noch kannst Du Gutwillige von Trollen nicht unterscheiden... Deshalb - Ball flach halten.

    Nochmal zum Define:
    Konstanten, die an mehreren Stellen auftauchen - und vielleicht sogar irgendwann mal geändert werden sollen - definiert man besser mit einem Synonym um. Hat auch was mit Fehlerredundanz zu tun.
    In die Bredouille kommst Du dann aber eben mit der 25 im scanf-String.
    Da ist ein Stringliteral angesagt (und das habe ich bis heute auch so selten gebraucht, dass ich da erstmal wieder nachsehen müßte, wie es richtig verwendet wird :p ).



  • Hirogen(CD) schrieb:

    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.

    Doch es interessiert sich dafür. Deine Erklärung ist auch für die Füße, weil ein Zeiger selbstverständlich nicht nur eine Adresse IST, sondern auch eine (davon verschiedene) Adresse HAT. Hast du mal beide Versionen ausprobiert und die resultierenden Dateien extern überprüft?

    Ich hab zwar dein Programm nicht testen können, weil es unvollständig ist, aber folgendes Minimalbeispiel gibt im VS.NET nicht das gewünschte in die Datei aus:

    #include "stdafx.h"
    #include <stdio.h>
    #include <string.h>
    
    struct BUCH
    {
        char titel[40];
    	float preis;
    };
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	BUCH* b = (BUCH*)malloc(sizeof(BUCH));
    	strcpy(b->titel, "Industrielle Bildverarbeitung");
    	b->preis=10.0f;
    
    	FILE *f = fopen("buch.dat", "wb");
    	rewind(f);
    	fwrite(&b, 1, sizeof(BUCH), f);
    	fclose(f);
    	return 0;
    }
    

    (will heißen, der Titelstring ist nicht in der Datei enthalten, nur Müll)

    Das ist natürlich kein Wunder, wie oben gesagt. Wenn es bei dir anders ist, würd ich mich doch sehr wundern und dir nahelegen, dass du mal versuchst herauszufinden, warum das so ist.



  • Das haben Splieth@School und AJ ja nun auch schon außreichend erlkärt, wenn mans net verstehen will... 🙄



  • Hirogen(CD) schrieb:

    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.

    Ich bin dir nicht böse, aber ich möchte dich drauf hinweisen, dass du was falsch machst. Möglicherweise funktioniert das Programm so, auch bei anderen Compilern. Aber manchmal braucht es dann nur eine kleine Änderung oder eine andere Konfiguration am Computer bzw. es laufen andere Programme als sonst und du bekommst einfach nur noch Müll raus.

    Hast du mein Beispiel mal ausprobiert?

    Sollte es übrigens tatsächlich so sein, dass bei deinen beiden Compilern es keinen Unterschied macht, ob du & oder kein & verwendest (d. h. bei meinem Beispielprogramm kommt für zeiger und für &zeiger genau das gleiche raus), dann solltest du dich beim Hersteller beschweren, dass sie absolut fehlerhafte Programme ausliefern!


Anmelden zum Antworten