Beim Speichern automatisch eine Dateiendung beifügen
-
dann machts doch so
if (strstr(dateiname, ".txt")!= &dateiname[len - 5]) strcat(dateiname, ".txt");
Ihr macht euch das leben wohl gerne kompliziert
-
;fricky schrieb:
pointercrash() schrieb:
[Achja, weil einfach einfach einfach ist? Iss ja fies!
naja, das hat schon den nachteil, dass '.txt' auch mitten drin sein darf, um gefunden zu werden. aber vielleicht reichts ja trotzdem.
Seltsam eigentlich, ich frag mich hin und wieder, warum der Standard kein memmem() kennt, damit müsste man nur nach
.txt
mit Null danach suchen.
-
player4245 schrieb:
dann machts doch so
if (strstr(dateiname, ".txt")!= &dateiname[len - 5]) strcat(dateiname, ".txt");
^^auch doof, wenn 'len' kleiner als 5 ist.
-
Wäre schon sinnvoller strlen in einer Variablen zu speichern. Ich hatte auch dran gedacht, aber dann war mir irgendwie nicht danach, zu faul. Trotzdem bin ich kein Freund von "vielleicht reichts ja". Das ist wie buffer[wirdschonreichen]. Mit ineffizient kann ich leben, mit inkorrekt nicht.
Wahrscheinlich ist lolos Version am besten; korrekt und schnell, mal davon abgesehen dass ich mir den Funktionsaufruf sparen würde.
-
dann sorg dafür das len nicht kleiner als 5 ist. Bei nem statischen buffer wäre das auch ziemlich sinnfrei. Und wenn du den Speicher dynamisch reservierst machst du halt vornedran eine Abfrage.
-
Wieso ist das sinnfrei? Ich kann meine Datei doch "123" nennen wenn ich will.
-
In wenigen Fällen wird es vorkommen dass ein Dateiname nur 5 Zeichen lang ist. Schon allein die Endung verbraucht ja 4 Zeichen.
-
Es geht ja darum dass der Benutzer eben keine Dateiendung eingibt. Drum soll die ja angehängt werden, falls er das nicht macht.
-
nwp2 schrieb:
Trotzdem bin ich kein Freund von "vielleicht reichts ja".
bei 'nem filesystem, das keine punkte im namen erlaubt (FAT 8.3 z.b.), reichts ja tatsächlich.
btw, vielleicht noch der hier:char *found = strstr (dateiname, ".txt"); if (found == 0 || found[4] != 0) { strcat (dateiname, ".txt"); }
-
player4245 schrieb:
dann sorg dafür das len nicht kleiner als 5 ist. Bei nem statischen buffer wäre das auch ziemlich sinnfrei. Und wenn du den Speicher dynamisch reservierst machst du halt vornedran eine Abfrage.
Wie ist das eigentlich? Windows macht zB Beschränkungen der Pfadangaben auf MAX_PATH, machen das die Unix-Leute auch so? Jedenfalls würde ich nach solchen Grenzen Ausschau halten, wenn es um die Puffergrösse geht, anstatt hier mit realloc() herumzubasteln.
-
;fricky schrieb:
char *found = strstr (dateiname, ".txt"); if (found == 0 || found[4] != 0) ...
Das ist nett, und man versteht's auch sofort.
-
µngbd schrieb:
Das ist nett, und man versteht's auch sofort.
Hmm. Andererseits: wenn in dem String viele Vorkommen von
.txu
sind, wird man wahrscheinlich mit strlen() besser dran sein.
-
Unglaublich wie es dieses Forum immer wieder schafft aus völlig banalen Themen das komplizierteste der Welt zu machen.
-
player4245 schrieb:
Unglaublich wie es dieses Forum immer wieder schafft aus völlig banalen Themen das komplizierteste der Welt zu machen.
Ein Beweis dafür, dass banale Themen nur banal auf den ersten Blick erscheinen aber dennoch nicht trivial sind.