Daten über Tastatur in Datei schreiben
-
@c.rackwitz ja meine ich ja struct
irgendwie kriege ich es nie gebacken die mal auseinander zu halten
Ja es ist in Ordnung aber es ist unnötig kompliziert.@TactX jedem das seine
Bisch späta...
Cl0v3r
-
Cl0v3r schrieb:
@TactX jedem das seine
Hör auf TactX, der Hinweis war gut und weise.
Deine Aufgabe ist es jetzt mir zu erklären warum fgets() besser als gets() ist. Es ist ein essentieller Unterschied der mich dazu bringt gets() nur in quick'n'dirty code einzusetzen und niemals ein einer ordentlichen Anwendung.
-
Ähmm...meinst du ich soll dir erklären was besser an fgets() ist?
Keine Ahnung deswegen benutze ich wohl noch gets(). :pKommt drauf an ich benutzte eigentlich gets() immer dann wenn ich keine Lust habe viel zu tippen oder fgets() wenn ich in ein Array schreiben will.
Denn anscheinend reserviert man mit fgets() den benötigten Speicher.
Genau weiß ich das nicht und es wäre schön wenn man nicht immer diese encrypteten Antworten bekommt bei denen man gar nicht weiß wozu man antworten soll.
Ich mein das nicht böse oder so, bloß wie schon gesagt "Jedem das seine".
Klar ist gut wenn man immer mehr erfährt und auch warum man denn lieber fgets() als gets() benutzen sollte aber nicht jeder weiß alles.Wie mein Opa immer zu sagen plegt: "Ne jut jebratene Janz ist ne jute Jabe Jottes."
mfg
Cl0v3r
-
Cl0v3r schrieb:
Ähmm...meinst du ich soll dir erklären was besser an fgets() ist?
Keine Ahnung deswegen benutze ich wohl noch gets(). :pNaja, das war eher ein Hinweis: mach dich mal schlau was der Unterschied ist, er ist nämlich signifikant.
Kommt drauf an ich benutzte eigentlich gets() immer dann wenn ich keine Lust habe viel zu tippen
gets(name);
fgets(name, len, stdin);mhm... so viel ist das nicht.
oder fgets() wenn ich in ein Array schreiben will.
Ein string ist nichts anderes als ein array aus char
Denn anscheinend reserviert man mit fgets() den benötigten Speicher.
Nein.
Genau weiß ich das nicht und es wäre schön wenn man nicht immer diese encrypteten Antworten bekommt bei denen man gar nicht weiß wozu man antworten soll.
Es wurde schon sooft geklärt, dass ich wenig Lust habe es nochmal zu erklären. Versuch dich schlau zu machen, benutz google, sieh in deine Dokumentation, durchscuhe das Forum (falls die Suchfunktion gehen sollte, ka ob sie es tut)
Falls du wirklich nichts findest, erkläre ich es dir gerne - ich versuche hier eigentlich nur etwas eigeninitiative anzustacheln...
wie schon gesagt "Jedem das seine".
Naja, jedem das seine passt nicht ganz. Denn gets() ist klar eine Sicherheitslücke (gcc warnt dich zB bei der Verwendung). Egal was du machst, sobald du gets() im Code hast, kannst du opfer eines Bufferoverflows werden - das ist nicht nett.
-
Shade Of Mine schrieb:
Kommt drauf an ich benutzte eigentlich gets() immer dann wenn ich keine Lust habe viel zu tippen
gets(name);
fgets(name, len, stdin);mhm... so viel ist das nicht.
Wenn ich das öfters benutze schon.
Shade Of Mine schrieb:
Genau weiß ich das nicht und es wäre schön wenn man nicht immer diese encrypteten Antworten bekommt bei denen man gar nicht weiß wozu man antworten soll.
Es wurde schon sooft geklärt, dass ich wenig Lust habe es nochmal zu erklären. Versuch dich schlau zu machen, benutz google, sieh in deine Dokumentation, durchscuhe das Forum (falls die Suchfunktion gehen sollte, ka ob sie es tut)
Ich bin noch nicht lange hier im Forum.
Ich habe dich übrigens nicht darum gebeten das du mir erklärst was der Unterschied ist, schließlich hast du mir gesagt ich soll dir erklären was der Unterschied ist, denn bis vor kurzem hat mich das auch nicht interessiert und ich wußte nicht das die Unterschiede so gravierend sind.
Jetzt weiß ich aber das die Unterschiede (anscheinend) so heftig sind und jetzt werde ich mich auch schlau machen.mfg
Cl0v3r
-
ist es eigentlich sinnvoll wenn man hier noch mal prüft ob die datei NULL ist?
void erstellen(void) { printf("Geben Sie bitte den Namen der zu erstellenden Datei ein: \n"); scanf("%s",datnam); dat = fopen (datnam,"wb+"); if (datnam==NULL) { fprintf(stderr,"\nFehler: Datei %s kann nicht erstellt werden!\n",datnam); } }
-
Wenn dann musst du "dat" (dein Filepointer, FILE*) auf NULL überprüfen und nicht "datnam" (den string der den Dateinamen enthält). "datnam" solltest du wenn dann schon überprüfen, bevor du versuchst die Datei zu öffnen. Das machst du dann aber mit strlen().
Außerdem macht die Funktion so nicht viel Sinn. Du solltest dann schon den FILE* auch zurückgeben.
-
aber mal anders gefragt: in welchen fällen würde das programm mir denn sagen das die datei nicht erstellt werden konnte?
-
Mal angenommen du hast "datnam" deklariert (fehlt in dieser Fkt. noch), dann nur wenn "datnam" NULL wäre (also ein Nullzeiger).
-
die funktion ist nur ein teil des quellcodes und deklariert hab ich vorher...funktioniert ja auch so wie es soll. wollt nur wissen ob ich auf diese überprüfung bei der erstellung der datei verzichten kann, denn zum öffnen einer datei, hab ich ne andere funktion eingebunden...